.NET 4.8项目引用netstandard2.0无法通过msbuild进行构建

5
解决方案在VS2019中构建良好,但是当我们的构建代理msbuild获取我们的解决方案时,它会抱怨引用了几个dll。
我刚刚添加了一个NuGet包的引用,该包带来了netstandard 2.0依赖项,所以似乎这是问题所在。
我注意到,如果我先在构建服务器上使用VS构建解决方案...然后相同的msbuild命令行之后就会成功。 因此,在正常的构建情况下,这些netstandard dll似乎没有被构建,以便可以包含在其他项目编译中。

F:\ Agents \ MyAgent_work \ 18 \ s \ src \ WS_Reports.metaproj:警告MSB3268:无法解析主要引用“F:\ Agents \ MyAgent_work \ 18 \ b \ My.Project \ My.Project.dll”,因为它间接依赖于框架程序集“netstandard,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51”,而此程序集在当前目标框架中无法解析。“.NETFramework,Version = v4.8”。要解决此问题,请删除引用“F:\ Agents \ MyAgent_work \ 18 \ b \ My.Project \ My.Project.dll”,或将应用程序重新定位到包含“netstandard,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51”的框架版本中。

这是解决方案文件声明的项目,其msbuild引发错误...可以看到在错误中显示的dll的项目引用(如上例)。 请注意,我添加了新的netstandard2.0包的此项目和项目都针对v4.8目标框架。
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WS.Reports", "WebServices\WS.Reports\", "{C47BAAE6-0708-4D43-83B8-92405B31A3E0}"
    ProjectSection(WebsiteProperties) = preProject
        SccProjectName = "SAK"
        SccAuxPath = "SAK"
        SccLocalPath = "SAK"
        SccProvider = "SAK"
        TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.8"
        ProjectReferences = "{2222173A-112A-44F8-A614-C7CCBDACEFE8}|My.Project.Bus.dll;{222924FE-877B-4E18-B960-94DED3DB6DF2}|MyProject.Protocols.Shared.dll;{222F5846-55E6-4541-B43B-E49674963E02}|MyProject.AuthProtocols.dll;{2224BC03-6C7E-4E15-B158-D9BD03D0E8B3}|My.Project.dll;{222BAF47-1C9F-4A56-9152-B4240A188612}|My.Project.Images.dll;{222FE788-27B1-4B03-B052-BCFFF251C15A}|My.Project.Legacy.dll;"
        Debug.AspNetCompiler.VirtualPath = "/WS.Reports"
        Debug.AspNetCompiler.PhysicalPath = "WebServices\WS.Reports\"
        Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\WS.Reports\"
        Debug.AspNetCompiler.Updateable = "true"
        Debug.AspNetCompiler.ForceOverwrite = "true"
        Debug.AspNetCompiler.FixedNames = "false"
        Debug.AspNetCompiler.Debug = "True"
        Release.AspNetCompiler.VirtualPath = "/WS.Reports"
        Release.AspNetCompiler.PhysicalPath = "WebServices\WS.Reports\"
        Release.AspNetCompiler.TargetPath = "PrecompiledWeb\WS.Reports\"
        Release.AspNetCompiler.Updateable = "true"
        Release.AspNetCompiler.ForceOverwrite = "true"
        Release.AspNetCompiler.FixedNames = "false"
        Release.AspNetCompiler.Debug = "False"
        VWDPort = "17515"
        VWDDynamicPort = "false"
        SlnRelativePath = "WebServices\WS.Reports\"
        StartServerOnDebug = "false"
    EndProjectSection
EndProject

也许我需要处理出错的项目或者具有 netstandard 引用以针对 v4.8 和 netstandard2.0 的项目?

4.8 引用 netstandard2.0 应该不需要多目标。你只需要一个更新的 msbuild 版本吗? - rbennett485
感谢确认多目标的问题...这似乎不再有意义了(4.7.2及以上版本)。将检查msbuild版本。看起来这不太可能是错误的,因为在引用netstandard之前,4.8项目(以及其他一些.netcore3.1)一直在工作。 "C:\ Program Files(x86)\ Microsoft Visual Studio \ 2019 \ Enterprise \ MSBuild \ Current \ Bin \ msbuild.exe" - Bob
这个 Github 问题跟踪似乎是针对同样的问题。https://github.com/dotnet/standard/issues/1771 - AJ Henderson
@Bob,你有没有在这方面有过什么好运? - AJ Henderson
2个回答

3

在您的web.config文件中添加对netstandard程序集的引用:

<system.web>
  <compilation debug="true" targetFramework="4.8">
    <assemblies>
      <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"/>
   </assemblies> 
 </compilation>
 <httpRuntime targetFramework="4.8" />
 ...

1
没有成功。根据其他帖子尝试过了。 - Bob

1
在我的情况下,问题是nuget的版本太旧了。当我使用更新的nuget.exe版本进行还原后,通过msbuild构建就可以正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接