首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dotnet构建条件PackageReference

Dotnet构建条件PackageReference
EN

Stack Overflow用户
提问于 2020-05-26 16:24:16
回答 1查看 1.1K关注 0票数 0

我需要在构建后运行一个ILRepack MSBuild任务,并在我们的项目文件中添加了以下目标:

代码语言:javascript
复制
  <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中的构建。

对于一个正常的构建,我想通过/p:RunILRepack=false来允许我运行单元测试,获得代码覆盖率并对代码执行声纳库分析。

在单元测试项目中,我声明了以下内容:

代码语言:javascript
复制
  <PropertyGroup Condition="'$(RunILRepack)' == ''">
    <RunILRepack>false</RunILRepack>
  </PropertyGroup>
代码语言:javascript
复制
  <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>

我尝试过但没有取得任何成功的备选办法是:

代码语言:javascript
复制
      <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和pack中包含一些程序集引用,这样我们就可以发布包了。

现在,对于第二个构建,我总是会得到一个构建错误,比如:

error CS0433:类型“RsaSecurityKey”同时存在于“Microsoft.IdentityModel.Tokens、Version=5.2.4.0、Culture=neutral、PublicKeyToken=31bf3856ad364e35”和“Company.Namespace.AssemblName,Version=1.1.2.0,Culture=neutral,PublicKeyToken=null”中。

错误CS0433:类型'RsaSecurityKey‘存在于两个.

错误CS0433:类型'JsonWebKey‘存在于两个.

这意味着这些引用是导入的,尽管情况不应该是这样的。

到目前为止,我能够在传递/p:RunILRepack=true时构建项目的唯一方法是完全删除上面列出的包引用。

如何包含这些PackageReference项,以便只在设置/p:RunILRepack=false时才导入这些项

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-27 13:02:12

我最终通过引入额外的构建配置来解决这个问题,然后更改了在该配置上被忽略的item组条件:

代码语言:javascript
复制
  <Choose>
    <When Condition="'$(Configuration)' != 'ReleaseILMerge'">
      <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>

这是唯一起作用的东西。我不知道为什么使用属性无效。这肯定是MSBuild或Nuget中的一个bug。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62026843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档