问题描述
该解决方案在VS2019中构建良好,但是当我们的构建代理上的msbuild掌握了我们的解决方案时,它抱怨引用了我们的多个dll。
我刚刚添加了对NuGet包的引用,该包引入了netstandard 2.0依赖关系,所以这似乎是问题所在。
我已经注意到,如果我进入构建服务器并在VS FirsT中构建解决方案...。那么,相同的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,文化=中性,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?
解决方法
在您的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" />
...
,
就我而言,是 nuget 的版本太旧了。当我使用较新版本的 nuget.exe 进行还原时,通过 msbuild 构建工作正常。