代码之家  ›  专栏  ›  技术社区  ›  Camilo Terevinto Chase R Lewis

Roslyn编译项目生成空程序集

  •  1
  • Camilo Terevinto Chase R Lewis  · 技术社区  · 8 年前

    这是对 this question 在那里,我已经通过几十个帖子的组合得到了解决方案。

    这很容易复制:

    <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>
    

    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());
                    }
                }
            }
        }
    }
    

    加载解决方案后查看工作空间,我在Diagnostics属性上看到一条错误消息:

    Msbuild failed when processing the file 'C:\WebApplication1\WebApplication1.csproj' with message: The SDK 'Microsoft.NET.Sdk.Web' specified could not be found.  
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Camilo Terevinto Chase R Lewis    8 年前

    here ,这还不是一个受支持的场景。

    我打电话解决了这个问题 dotnet build Process .