Сделайте tnet Build Conditional PackageReference - PullRequest
0 голосов
/ 26 мая 2020

Мне нужно запустить задачу ILRepack MSBuild после сборки и добавить следующую цель в наш файл проекта:

  <Target Name="MergeNet45" AfterTargets="Build" Condition="'$(TargetFramework)' == 'net45' and '$(RunILRepack)' == 'true'">
    <Exec WorkingDirectory="$(OutputDir)" Command="$(ILRepack) /internalize /out:$(OutputDir)\$(AssemblyName).dll $(OutputDir)\$(AssemblyName).dll $(OutputDir)\System.IdentityModel.Tokens.Jwt.dll  $(OutputDir)\Microsoft.IdentityModel.JsonWebTokens.dll $(OutputDir)\Microsoft.IdentityModel.Tokens.dll $(OutputDir)\Microsoft.IdentityModel.Logging.dll $(OutputDir)\Newtonsoft.Json.dll" />
  </Target>

  <Target Name="MergeStandard" AfterTargets="Build" Condition="'$(TargetFramework)' == 'netstandard2.0' and '$(RunILRepack)' == 'true'">
    <Exec WorkingDirectory="$(OutputDir)" Command="$(ILRepack) /internalize /lib:$(NetStandardLoc) /out:$(OutputDir)\$(AssemblyName).dll $(OutputDir)\$(AssemblyName).dll $(OutputDir)\System.IdentityModel.Tokens.Jwt.dll  $(OutputDir)\Microsoft.IdentityModel.JsonWebTokens.dll $(OutputDir)\Microsoft.IdentityModel.Tokens.dll $(OutputDir)\Microsoft.IdentityModel.Logging.dll $(OutputDir)\Newtonsoft.Json.dll $(OutputDir)\Microsoft.Extensions.Configuration.Json.dll" />
  </Target>

Теперь для проекта модульного тестирования у нас есть несколько ссылок, которые нам нужно включить для случаев, когда мы не выполняли ILRepack, таких как сборки из Visual Studio.

Для нормальной сборки я хочу передать /p:RunILRepack=false, чтобы я мог запускать модульные тесты, получать покрытие кода и выполнить сонаркубовый анализ кода.

В проекте модульного тестирования я объявил следующее:

  <PropertyGroup Condition="'$(RunILRepack)' == ''">
    <RunILRepack>false</RunILRepack>
  </PropertyGroup>
  <Choose>
    <When Condition="'$(RunILRepack)' == 'false'">
      <ItemGroup>
        <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.2.4"  />
        <PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="5.2.4" />
        <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="5.2.4" />
        <PackageReference Include="Microsoft.IdentityModel.Logging" Version="5.2.4" />
        <PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
      </ItemGroup>
    </When>
  </Choose>

Альтернативные варианты, которые я пробовал без успеха, были:

      <ItemGroup Condition="'$(RunILRepack)' == 'false'">
        <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.2.4"  />
        <PackageReference Include="Microsoft.IdentityModel.JsonWebTokens" Version="5.2.4" />
        <PackageReference Include="Microsoft.IdentityModel.Tokens" Version="5.2.4" />
        <PackageReference Include="Microsoft.IdentityModel.Logging" Version="5.2.4" />
        <PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
      </ItemGroup>

, а также переместите PackageReferences в отдельный файл .proj и поставьте условие для импорта.

У меня все вышеперечисленное работает должным образом.

На втором проходе , Я хочу передать /p:RunILRepack=true, и на этот раз он должен запустить ILRepack и включить некоторые ссылки на сборки в нашу основную dll и пакет, чтобы мы могли опубликовать sh пакет.

Теперь для этой второй сборки я буду аль способы получить ошибку сборки, например:

ошибка CS0433: тип RsaSecurityKey существует как в Microsoft.IdentityModel.Tokens, Version = 5.2.4.0, Culture = нейтральный, PublicKeyToken = 31bf3856ad364e35 'и' Company.Namespace.AssemblName, версия = 1.1.2.0, культура = нейтральная, PublicKeyToken = null '

ошибка CS0433: Тип' RsaSecurityKey 'существует в обоих ...

ошибка CS0433: тип 'JsonWebKey' существует в обоих ...

Это означает, что эти ссылки импортируются, хотя это не должно быть так.

Единственный способ, который у меня есть до сих пор смог получить проект для сборки при передаче /p:RunILRepack=true - это полное удаление ссылок на пакеты, перечисленных выше.

Как я могу включить эти элементы PackageReference, чтобы они были импортированы только при установке /p:RunILRepack=false?

1 Ответ

0 голосов
/ 27 мая 2020
• 1000 Понятия не имею, почему использование свойств не работает. Это должно быть ошибкой в ​​MSBuild или Nuget.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...