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