【发布时间】:2019-07-02 01:30:46
【问题描述】:
问题的简短版本:
.NET Core 3 中是否有任何方法可以指定本地探测路径,使用与 app.config 中的 <probing> 元素相同的规则? additionalProbingPaths 似乎不起作用。
问题的长版:
我正在将一个项目从 .NET Framework 迁移到 .NET Core 3。在原始项目中,我在 lib/ 文件夹中保留了许多辅助 dll。这很好,因为我在App.exe.config 中设置了探测路径,如下所示:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="lib" />
</assemblyBinding>
</runtime>
但是,将项目转换为 .NET Core 3 后,程序无法运行,说找不到 dll。 App.exe.config 仍然存在,并且仍在被读取/使用,因为它还包含有关 System.Configuration 参数的信息,并且该部分程序仍然可以正常工作。
我确定在App.runtimeconfig.json 中有一个新的json 文件来存储程序的配置信息。它是自动生成的,默认情况下不包含额外的探测路径,但App.runtimeconfig.dev.json 文件包含一些。
现在,我不能使用 .dev.json 文件中的路径,因为这些路径指向本地用户目录,并且不能用于部署。但是,我可以使用项目目录中的模板文件 (runtimeconfig.template.json) 将我自己的版本添加到主运行时配置。这会将属性添加到主 runtimeconfig 文件中的 runtimeOptions 分组中。模板代码为:
{
"additionalProbingPaths": [
"lib"
]
}
而App.runtimeconfig.json文件的最终输出是:
{
"runtimeOptions": {
"tfm": "netcoreapp3.0",
"framework": {
"name": "Microsoft.WindowsDesktop.App",
"version": "3.0.0-preview6-27804-01"
},
"additionalProbingPaths": [
"lib"
]
}
}
但是,我插入的相对路径似乎根本没有被使用,无论是使用模板将其插入主 runtimeconfig 文件,还是只是手动编辑 dev.json 文件。我还尝试了一些关于如何指定目录的变体。如果指定的程序集不在根程序目录中,程序总是会生成一个错误,指出找不到指定的程序集。该错误表示它正在寻找从App.deps.json 文件中获取的lib/netstandard2.0/HtmlAgilityPack.dll(或其他类似库)。
解决方法是让所有库都位于根程序目录中,但由于这以前可以工作,我希望现在可以工作,我想知道什么我做错了。尝试在 Visual Studio 中使用诊断输出获取更多信息失败,因为程序在生成任何诊断信息之前终止。
【问题讨论】:
标签: c# .net .net-core migration