.NET 5.0 发布给出 CS0006 dll 找不到 .NET Standard 2.0 依赖项
.NET 5.0 publish gives CS0006 dll could not be found for .NET Standard 2.0 dependency
我有一个 .NET 5.0 项目 ProjectA
,它依赖于 .NET Standard 2.0 项目 ProjectB
。我可以毫无问题地构建和 运行 .NET 5.0,包括它的依赖项。这两个项目存储在同一个根文件夹中,仅依赖默认配置,生成的库最终在
ProjectB\bin\Release\netstandard2.0\ProjectB.dll
ProjectA\bin\Release\net5.0\ProjectA.dll
符合预期。
如果我使用 VS Pro 2019 v16.8.6 UI 发布 .NET 5.0 项目,但是,使用发布配置文件
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DeleteExistingFiles>False</DeleteExistingFiles>
<ExcludeApp_Data>False</ExcludeApp_Data>
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider>
<PublishUrl>{{ my-url }}</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod>
<SiteUrlToLaunchAfterPublish />
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<ProjectGuid>{{ my-guid }}</ProjectGuid>
<SelfContained>true</SelfContained>
<PublishSingleFile>True</PublishSingleFile>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
我最终得到的错误是
CSC(0,0): Error CS0006: Metadata file 'ProjectB\bin\Release\netstandard2.0\win-x64\ProjectB.dll' could not be found
发布之前的构建仍按预期构建 ProjectB
,但仍将其保留在 netstandard2.0
中,而不是发布步骤查找的 netstandard2.0\win-x64
。我可以添加一个构建步骤来手动将构建的 ProjectB
文件复制到 win-x64
,但这很笨拙。
有没有办法调整发布配置,以便它在正确的位置查找依赖项?
最相关的 Whosebug post 是 ,其中我们在不同的上下文中遇到相同的问题,解决方案是在发布个人资料。这样做并不能解决我的问题。
有趣的是,dotnet publish -r win-x64
(来自 .NET SDK (5.0.104))找出了在哪里可以找到 ProjectB
文件,这样就可以了,但似乎无法使用 pubxml
以上(参见 also this SO question,其中 none 的给定答案在此处有效)。
更新 Visual Studio(从 16.8.6 到 16.9.2)解决了这个问题,所以推测这只是早期版本 Visual Studio 中的一个错误。
我有一个 .NET 5.0 项目 ProjectA
,它依赖于 .NET Standard 2.0 项目 ProjectB
。我可以毫无问题地构建和 运行 .NET 5.0,包括它的依赖项。这两个项目存储在同一个根文件夹中,仅依赖默认配置,生成的库最终在
ProjectB\bin\Release\netstandard2.0\ProjectB.dll
ProjectA\bin\Release\net5.0\ProjectA.dll
符合预期。
如果我使用 VS Pro 2019 v16.8.6 UI 发布 .NET 5.0 项目,但是,使用发布配置文件
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DeleteExistingFiles>False</DeleteExistingFiles>
<ExcludeApp_Data>False</ExcludeApp_Data>
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider>
<PublishUrl>{{ my-url }}</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod>
<SiteUrlToLaunchAfterPublish />
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<ProjectGuid>{{ my-guid }}</ProjectGuid>
<SelfContained>true</SelfContained>
<PublishSingleFile>True</PublishSingleFile>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
</Project>
我最终得到的错误是
CSC(0,0): Error CS0006: Metadata file 'ProjectB\bin\Release\netstandard2.0\win-x64\ProjectB.dll' could not be found
发布之前的构建仍按预期构建 ProjectB
,但仍将其保留在 netstandard2.0
中,而不是发布步骤查找的 netstandard2.0\win-x64
。我可以添加一个构建步骤来手动将构建的 ProjectB
文件复制到 win-x64
,但这很笨拙。
有没有办法调整发布配置,以便它在正确的位置查找依赖项?
最相关的 Whosebug post 是
有趣的是,dotnet publish -r win-x64
(来自 .NET SDK (5.0.104))找出了在哪里可以找到 ProjectB
文件,这样就可以了,但似乎无法使用 pubxml
以上(参见 also this SO question,其中 none 的给定答案在此处有效)。
更新 Visual Studio(从 16.8.6 到 16.9.2)解决了这个问题,所以推测这只是早期版本 Visual Studio 中的一个错误。