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.
右...私はあなたの問題を実際に "解決"しているだけではなく、あなたの問題を解決することに懐疑的です。 :-)デバッガの 'solution.Projects'でぼんやりと試してみると、明らかに見えるものがあるかどうか確認できます。それはちょうどspitballingです。 Roslyn APIには個人的な経験はありません。 –
ローズナイトパッケージのどのバージョンをお使いですか? – m0sa
@ m0sa Microsoft.Net.Compilers NuGetパッケージを参照している場合、2.3.1です。 –