#msbuild #.net-standard
#msbuild #.net-стандартный
Вопрос:
Решение отлично строится в VS2019, но когда msbuild в наших агентах сборки получает доступ к нашему решению, он жалуется на ссылки на несколько наших библиотек DLL.
Я только что добавил ссылку на пакет NuGet, который привел к зависимости netstandard 2.0, так что, похоже, это проблема.
Я заметил, что если я перейду на сервер сборки и сначала создам решение в VS …. затем та же командная строка msbuild будет выполнена успешно. Похоже, что в обычной ситуации сборки эти библиотеки DLL netstandard не создаются таким образом, чтобы их можно было включить в другие компиляции проекта.
F:AgentsMyAgent_work18ssrcWS_Reports.metaproj : предупреждение MSB3268: основная ссылка «F:AgentsMyAgent_work18bMy.ProjectMy.Project.dll » не удалось разрешить, поскольку он имеет косвенную зависимость от сборки фреймворка «netstandard, Version= 2.0.0.0, Culture = neutral, PublicKeyToken= cc7b13ffcd2ddd51», которая не может быть решена в текущей целевой платформе. «.NetFramework,Version = v4.8». Чтобы решить эту проблему, либо удалите ссылку «F:AgentsMyAgent_work18bMy.ProjectMy.Project.dll » или перенастроите ваше приложение на версию платформы, которая содержит «netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken= cc7b13ffcd2ddd51».
Вот объявление файла решения проекта, msbuild которого выдает ошибку …. можно увидеть ссылку проекта на библиотеки DLL, которые отображаются в ошибке (пример выше). Обратите внимание, что как этот, так и проект я добавил свои новые пакеты netstandard2.0 в target framework версии 4.8
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "WS.Reports", "WebServicesWS.Reports", "{C47BAAE6-0708-4D43-83B8-92405B31A3E0}"
ProjectSection(WebsiteProperties) = preProject
SccProjectName = "SAK"
SccAuxPath = "SAK"
SccLocalPath = "SAK"
SccProvider = "SAK"
TargetFrameworkMoniker = ".NETFramework,Version=v4.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 = "WebServicesWS.Reports"
Debug.AspNetCompiler.TargetPath = "PrecompiledWebWS.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 = "WebServicesWS.Reports"
Release.AspNetCompiler.TargetPath = "PrecompiledWebWS.Reports"
Release.AspNetCompiler.Updateable = "true"
Release.AspNetCompiler.ForceOverwrite = "true"
Release.AspNetCompiler.FixedNames = "false"
Release.AspNetCompiler.Debug = "False"
VWDPort = "17515"
VWDDynamicPort = "false"
SlnRelativePath = "WebServicesWS.Reports"
StartServerOnDebug = "false"
EndProjectSection
EndProject
Возможно, мне нужен проект, выдающий ошибки, ИЛИ проекты со ссылками на netstandard, чтобы настроить таргетинг как на версии 4.8, так и на netstandard2.0?
Комментарии:
1. 4.8 ссылки на netstandard2.0 должны быть в порядке без необходимости многозадачности. Вам просто нужна более свежая версия msbuild?
2. Спасибо за подтверждение в multitarget…. это просто больше не имело смысла (4.7.2 и выше). Проверит версию msbuild. Не кажется вероятным , что это неправильный вариант, поскольку проекты 4.8 (и некоторые другие .netcore3.1) работали до этой ссылки на netstandard. «C:Program Файлы (x86) Microsoft Visual Studio2019EnterpriseMSBuildCurrentBinmsbuild.exe »
3. Похоже, что эта проблема с github связана с той же проблемой. github.com/dotnet/standard/issues/1771
4. @Bob тебе когда-нибудь везло с этим?
Ответ №1:
В вашем файле 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. Не повезло. Пробовал это на основе некоторых других сообщений.
Ответ №2:
В моем случае это было из-за того, что версия nuget была слишком старой. Когда я использовал более новую версию nuget.exe для восстановления сборка через msbuild работала просто отлично.