【发布时间】:2021-04-11 07:02:55
【问题描述】:
我有 ProjectA 和 ProjectB
项目A
是一个 dotnet 标准项目,带有输出和 exe 文件用作工具。 这会在构建时生成一个 nuget 包,使用属性和属性将包标记为工具。 它还被标记为从安装 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="build\ProjectA.props" Pack="True" PackagePath="build" />
<None Include="build\net461\ProjectA.targets" Pack="True" PackagePath="build" />
</ItemGroup>
<PropertyGroup>
</Project>
ProjectA.targets
<?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中即可。
任何人有任何建议我缺少什么或者这可能是一个问题?
【问题讨论】:
标签: visual-studio .net-core msbuild nuget