1212using NuGet . Frameworks ;
1313using NuGet . Packaging . Core ;
1414using NuGet . Protocol . Core . Types ;
15+ using NuGet . Versioning ;
1516using static NuGet . Frameworks . FrameworkConstants . CommonFrameworks ;
1617
1718namespace nugraph ;
1819
19- internal sealed class TemporaryProject : IDisposable
20+ public sealed class TemporaryProject : IDisposable
2021{
2122 private static readonly Encoding Utf8NoBom = new UTF8Encoding ( encoderShouldEmitUTF8Identifier : false ) ;
2223
2324 private readonly DirectoryInfo _directory ;
2425
25- private TemporaryProject ( PackageIdentity package , NuGetFramework targetFramework )
26+ public TemporaryProject ( ) : this ( package : null , targetFramework : null )
27+ {
28+ }
29+
30+ private TemporaryProject ( PackageIdentity ? package , NuGetFramework ? targetFramework )
2631 {
2732 _directory = new DirectoryInfo ( Path . Combine ( Path . GetTempPath ( ) , "nugraph" , Path . GetRandomFileName ( ) . Replace ( "." , "" , StringComparison . OrdinalIgnoreCase ) ) ) ;
2833 _directory . Create ( ) ;
2934
30- var project = new XElement ( "Project" , new XAttribute ( "Sdk" , "Microsoft.NET.Sdk" ) ,
31- new XElement ( "PropertyGroup" ,
32- new XElement ( "TargetFramework" , targetFramework . GetShortFolderName ( ) ) ) ,
33- new XElement ( "ItemGroup" ,
35+ var project = new XElement ( "Project" , new XAttribute ( "Sdk" , "Microsoft.NET.Sdk" ) ) ;
36+
37+ if ( targetFramework != null )
38+ {
39+ project . Add ( new XElement ( "PropertyGroup" ,
40+ new XElement ( "TargetFramework" , targetFramework . GetShortFolderName ( ) ) ) ) ;
41+ }
42+
43+ if ( package != null )
44+ {
45+ project . Add ( new XElement ( "ItemGroup" ,
3446 new XElement ( "PackageReference" , new XAttribute ( "Include" , package . Id ) , new XAttribute ( "Version" , package . Version ? . ToString ( ) ?? "*" ) ) ) ) ;
47+ }
3548
3649 File = new FileInfo ( Path . Combine ( _directory . FullName , "project.csproj" ) ) ;
37- Package = package ;
38- TargetFramework = targetFramework ;
50+ Package = package ?? new PackageIdentity ( "" , new NuGetVersion ( 0 , 0 , 0 ) ) ;
51+ TargetFramework = targetFramework ?? NuGetFramework . UnsupportedFramework ;
3952
4053 var settings = new XmlWriterSettings { Indent = true , OmitXmlDeclaration = true , Encoding = Utf8NoBom } ;
4154 using var xmlWriter = XmlWriter . Create ( File . FullName , settings ) ;
@@ -44,6 +57,8 @@ private TemporaryProject(PackageIdentity package, NuGetFramework targetFramework
4457
4558 public static async Task < TemporaryProject > CreateAsync ( PackageIdentity package , NuGetFramework ? targetFramework , DirectoryInfo ? sdk , ISettings nugetSettings , ILogger logger , CancellationToken cancellationToken )
4659 {
60+ ArgumentNullException . ThrowIfNull ( logger , nameof ( logger ) ) ;
61+
4762 var ( identity , resolvedTargetFramework ) = await ResolveAsync ( package , targetFramework , sdk , nugetSettings , logger , cancellationToken ) ;
4863 return new TemporaryProject ( identity , resolvedTargetFramework ) ;
4964 }
0 commit comments