2017-08-22 9 views
1

これはthis questionのフォローアップです。私はすでに数十の投稿を組み合わせて解決策を得ています。 Roslynでコンパイルされたプロジェクトは空のアセンブリを生成します

この

を簡単に再現することができます。そして、

<Project Sdk="Microsoft.NET.Sdk.Web"> 
    <PropertyGroup> 
    <TargetFramework>net47</TargetFramework> 
    </PropertyGroup> 

    <ItemGroup> 
    <Folder Include="wwwroot\" /> 
    </ItemGroup> 
    <ItemGroup> 
    <PackageReference Include="Microsoft.AspNetCore" Version="2.0.0" /> 
    <PackageReference Include="Microsoft.Build" Version="15.3.409" /> 
    <PackageReference Include="Microsoft.Build.Tasks.Core" Version="15.3.409" /> 
    <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="2.3.0-beta1" /> 
    <PackageReference Include="Microsoft.CodeAnalysis.Common" Version="2.3.1" /> 
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="2.3.1" /> 
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="2.3.1" /> 
    <PackageReference Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="2.3.1" /> 
    <PackageReference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" Version="1.0.7" /> 
    <PackageReference Include="Microsoft.Net.Compilers" Version="2.3.1" /> 
    </ItemGroup> 
</Project> 

.csproj

using System.IO; 
using System.Linq; 
using Microsoft.CodeAnalysis.MSBuild; 

namespace WebApplication1 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      var workspace = MSBuildWorkspace.Create(); 
      var project = workspace.OpenProjectAsyn(@"C:\WebApplication1\WebApplication1.csproj").Result; 
      var compilation = project.GetCompilationAsync().Result; 

      using (var memoryStream = new MemoryStream()) 
      { 
       var result = compilation.Emit(memoryStream); 
       if (result.Success) 
       { 
        File.WriteAllBytes(Path.Combine(@"C:\WebApplication1\", $"{compilation.AssemblyName}.dll"), memoryStream.ToArray()); 
       } 
      } 
     } 
    } 
} 

ソリューションをロードした後Worskpaceを見て、私は診断上のエラーメッセージを持っていますプロパティ:

Msbuild failed when processing the file 'C:\WebApplication1\WebApplication1.csproj' with message: The SDK 'Microsoft.NET.Sdk.Web' specified could not be found. 
+0

右...私はあなたの問題を実際に "解決"しているだけではなく、あなたの問題を解決することに懐疑的です。 :-)デバッガの 'solution.Projects'でぼんやりと試してみると、明らかに見えるものがあるかどうか確認できます。それはちょうどspitballingです。 Roslyn APIには個人的な経験はありません。 –

+0

ローズナイトパッケージのどのバージョンをお使いですか? – m0sa

+0

@ m0sa Microsoft.Net.Compilers NuGetパッケージを参照している場合、2.3.1です。 –

答えて

0

@DustinCampbell hereによると、これはまだサポートされているシナリオではありません。

Processからdotnet buildを代わりに呼び出して解決しました。

関連する問題