我在Windows上使用dotnet 2.1.4。 dotnet --info显示:
.NET Command Line Tools (2.1.4)
Product Information:
Version: 2.1.4
Commit SHA-1 hash: 5e8add2190
Runtime Environment:
OS Name: Windows
OS Version: 10.0.16299
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\2.1.4\
Microsoft .NET Core Shared Framework Host
Version : 2.0.5
Build : 17373eb129b3b05aa18ece963f8795d65ef8ea54
我使用dotnet publish为平台创建输出:
dotnet publish ..\src\ChestnutDS.Host\ChestnutDS.Host.csproj
-c Release -o ..\..\published\win-x64
--self-contained -r win-x64 -v n
这为我提供了包含323个文件的文件夹中所需的(和工作)输出。
现在,我想要做的是将所有大部分文件移到子文件夹中,例如lib。
根据我收集的内容,在runtimeconfig.json中设置additionalProbingPaths
should work:
{
"runtimeOptions": {
"additionalProbingPaths": [
"lib"
]
}
}
但它抱怨找不到图书馆:
Error:
An assembly specified in the application dependencies manifest (ChestnutDS.Host.deps.json) was not found:
package: 'Microsoft.AspNetCore.Antiforgery', version: '2.0.1'
path: 'lib/netstandard2.0/Microsoft.AspNetCore.Antiforgery.dll'
尝试将--additionalProbingPath作为命令行参数传递也不起作用,同样的错误。
尝试创建上述结构并移动文件(lib/netstandard2.0/Microsoft.AspNetCore.Antiforgery.dll
)也不起作用。
我错过了什么吗?该功能被删除了吗?它看起来并不像source code still contains it。
答案 0 :(得分:0)
尝试创建上述结构并移动文件
好像您在lib/netstandard2.0/Microsoft.AspNetCore.Antiforgery.dll
中有targets/Microsoft.AspNetCore.Antiforgery/2.0.1/runtime
,在"path": "microsoft.aspnetcore.antiforgery/2.0.1"
中有libraies/Microsoft.AspNetCore.Antiforgery/2.0.1
。在这种情况下,预期结构将为<additional probing path>/Microsoft.AspNetCore.Antiforgery/2.0.1/lib/netstandard2.0/Microsoft.AspNetCore.Antiforgery.dll
有两种类型的源文件夹,其中hostpolicy.dll
在搜索依赖库(*.dll
或*.ni.dll
):
<PackageName>/<Version>/<DllPath>
具有特定的子文件夹结构,并且默认情况下会生成*.deps.json
来满足此约定)在以下文件夹中搜索依赖项:
C:\Program Files\dotnet\shared\Microsoft.NETCore.App\2.1.4\
。假设我们有这个App.deps.json
(独立部署)
"targets": {
"runtime.win-x64.Microsoft.NETCore.App/2.0.0": {
"runtime": {
"foo/Microsoft.CSharp.dll": {}, // <========
}
}
}
"libraries": {
"runtime.win-x64.Microsoft.NETCore.App/2.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-8jivXDJLuJTxMQuInZaMiD2VbxehFmYAtn2V9mj9juaR5jH54/OBGmGv6SrIUVNqASXB/8dJbce/beIKnOzroQ==",
"path": "bar", // <========
"hashPath": "runtime.win-x64.microsoft.netcore.app.2.0.0.nupkg.sha512"
}
}
首先,hostpolicy.dll
将创建所有资产的列表-每个依赖项程序包的“运行时”和“本机”属性中的库。
接下来,它必须使用每个资产的绝对路径来创建TPA(受信任的平台程序集)列表。为此,它将首先在应用文件夹<app folder path>\Microsoft.CSharp.dll
中进行搜索(注意,它将为此特定文件夹省略“路径”)。
一旦找不到DLL,它将检查Additional Probing Paths
是否存在。
这次,由于Additional Probing Path
被认为是NuGet缓存,因此它期望存在某个子文件夹结构。
具体来说,它将从Package Name
节中提取Version
和"libraries"
,并结合"path"
(或"runtime"
)节中的"native"
和DLL路径。 / p>
因此,对于Microsoft.CSharp.dll
,探测路径将为<Additional Probing Path>/bar/foo/Microsoft.CSharp.dll