使用新的csproj在PDB中嵌入C#源代码

Sha*_*sky 5 .net c# msbuild csproj roslyn

最近发布的.NET工具似乎支持在PDB中嵌入C#,这可以改善步入第三方等的体验.运行时csc /?,我可以清楚地看到/ embed选项:"在PDB中嵌入所有源文件".

但是,似乎没有任何方法可以在csproj中指定它.更重要的是,似乎没有任何规定将任意开关传递给编译器,我将用它来手动传递/嵌入.

任何人都可以确认我没有错过任何内容,并且目前缺乏对/ embed的构建支持吗?这是否存在问题(如果没有问题)?任何建议的解决方法也将受到赞赏.

Luk*_*ský 6

现在有一个适当的MSBuild EmbedAllSources属性

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <EmbedAllSources>true</EmbedAllSources>
    [...]
Run Code Online (Sandbox Code Playgroud)

从我在本地观察到的结果来看,它的行为与上述EmbedFiles目标相同。


m0s*_*0sa 5

看起来roslyn任务应该通过EmbeddedFiles 项目组支持它们,方法是将它添加到.csproj中:

<Target Name="EmbedSources" BeforeTargets="CoreCompile">
   <ItemGroup>
      <EmbeddedFiles Include="@(Compile) " />
   </ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)

...这基本上是/ embed选项的作用.

您可能还需要提供一个SourceLinkjson文件,以连接PDB中的源,不确定是否自动发生.

  • 它是公开的......你应该可以通过 [`&lt;Csc SourceLink="your.json" /&gt;`](https://github.com/dotnet/roslyn/blob/version-2.0.0/ src/Compilers/Core/MSBuildTask/ManagedCompiler.cs#L106) 或 [`&lt;PropertyGroup&gt;&lt;SourceLink&gt;your.json&lt;/SourceLink&gt;&lt;/PropertyGroup&gt;`](http://source.roslyn.io/#MSBuildFiles/ C/Users/vslsnap/.nuget/packages/Microsoft.Net.Compilers/2.0.0-rc2-61102-09/tools/Microsoft.CSharp.Core.targets,141) (2认同)