проект .net 4.8 со ссылками netstandard2.0 не будет создаваться через msbuild

#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 работала просто отлично.