Msbuild包忽略具有目标和任务的nuget包



我有ProjectA和ProjectB

项目A

是一个dotnet标准项目,输出和exe文件用作工具。这将在生成时生成一个nuget包,使用property和property将包标记为工具。它还被标记为从安装nuget包的项目中自动排除,当它们也生成nuget包时。

<Project Sdk="Microsoft.Net.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<AssemblyName>ProjectA</AssemblyName>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<IsTool>true</IsTool>
<DevelopmentDependency>true</DevelopmentDependency>
</PropertyGroup>
<ItemGroup>
<None Include="buildProjectA.props" Pack="True" PackagePath="build" />
<None Include="buildnet461ProjectA.targets" Pack="True" PackagePath="build" />
</ItemGroup>
<PropertyGroup>
</Project>

项目A.目标

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<GetPackageVersionDependsOn>MyCustomTask;$(GetPackageVersionDependsOn)</GetPackageVersionDependsOn>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
</PropertyGroup>
<Target Name="MyCustomTask">
<!-- Idealy i would use a custom task to set PackageVersion to something different. Like 5.0.99-alpha1+102435 -->
<PropertyGroup>
<PackageVersion>5.0.99-alpha1+102435</PackageVersion>
</PropertyGroup>
</Target>
</Project>

项目B

安装对ProjectA创建的nuget包的引用。

<PropertyGroup>
<TargetFrameworks>net461</TargetFrameworks>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="ProjectA" Version="1.0.0" PrivateAssets="all" />
</ItemGroup>

当构建ProjectB时,以下文件将在obj/文件夹中生成:

  • .csproj.nuget.g.props
  • .csproj.nuget.g.targets

这些文件包括从以下位置的nuget包缓存导入ProjectA目标和道具:%userprofile%.nuget\projecta\1.0.0\build\projecta.targets等

Msbuild-t:pack在运行时会忽略这些导入,因此构建ProjectB从未像我所期望的那样将PackageVersion设置为5.0.99-alpha1+102435。

将ProjectA.targets的上述内容直接添加到ProjectB.csproj中即可。

有人对我缺少什么有什么建议吗?或者这可能是个问题吗?

如果使用*.targets将nuget项目打包到基于该文件的nuget包中,则应使该文件与csproj文件一起被识别。

根据描述,您似乎使用了该目标文件将nuget项目打包为5.0.99版本。

所以你应该让你的csproj和这样的文件一起工作:

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>

<!--the path of the *.targets file-->
<Import Project="xxxxxx.targets"/>
</Project>

更新1

清除nuget缓存或删除C:Usersxxx.nugetpackages(和msbuild -t:pack ProjectB.csproj下的所有文件以进行检查。

更新1

相反,修改项目B.csproj文件:

使用<TargetFramework>net461</TargetFramework>而不是<TargetFrameworks>net461</TargetFrameworks>

多平台框架似乎破坏了目标文件的性能,我也很好奇为什么会发生这种情况。但这是提示。你应该用它。

最新更新