Gon*_*ira 5 c# .net-core .net-5 .net-core-publishsinglefile
为了更好地解释,我将提供一些背景信息。
我有一个在运行时动态加载库的应用程序。该库是某种插件,应用程序旨在测试该插件。
为了能够调试插件,我使用插件项目打开 VS Code,并将调试器附加到已运行且已加载插件的应用程序。插件程序集已构建并具有一个不错的 PDB 文件。
所以工作流程如下:Application => load plugin => attach debugger
首先,即使应用程序已发布,这也是有效的。这是因为加载的插件是在调试中内置的,因此 PDB 就在那里。
但是,在某些情况下,我似乎无法正确附加或未加载符号。这是如果我发布带有该/p:PublishSingleFile=true标志的应用程序的话。在这种情况下,会生成一个文件,当我尝试附加调试器时,它不起作用。
谁能对此提供任何见解?或者一个可能的解决方案?
值得一提的是,我正在使用 .NET 5
干杯
回答我自己的问题。
/p:PublishSingleFile=true从 .NET Core 3.0 开始,默认情况下使用该标志假定--self-contained true. 这是有道理的,如果您将所有内容打包到一个文件中,您可能也需要 .NET 运行时。
问题--self-contained是它会修剪组件以减小尺寸。
修剪独立部署模型是独立部署模型的专门版本,经过优化以减少部署规模。
因此,在反射使用(例如动态加载程序集)方面,存在一些可能导致运行时行为不当的风险。
然而,由于无法可靠地分析各种有问题的代码模式(主要集中在反射使用),应用程序的构建时分析可能会导致运行时失败。
你可以在这里阅读更多。
禁用--self-contained可以解决问题,并且我能够将调试器附加到单文件应用程序。我通过添加<SelfContained>false</SelfContained>到项目文件来做到这一点。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<SelfContained>false</SelfContained>
<PublishSingleFile>true</PublishSingleFile>
</PropertyGroup>
...
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助将来的人。
| 归档时间: |
|
| 查看次数: |
1386 次 |
| 最近记录: |