在.csproj中包含.targets文件以全局定义项目和MSBuild变量

时间:2018-11-07 22:24:46

标签: c# asp.net msbuild csproj

对于一个大约有13个项目的解决方案,我需要在一个地方定义变量,每个项目都具有来自相同位置的外部依赖项的不同组合。现在,将它们作为变量包含在PropertyGroup中已经很容易了,但是,如果发生了某些变化(例如版本号),我们就不必使用该变化来更新每个项目文件。

我尝试创建一个目标文件,该文件具有在项目之间使用的变量,并将其包含在程序集引用之前的csproj文件中。这似乎在网站项目中表现出色,但在类库项目中却没有。找不到参考。

我应该如何以一种在项目类型之间安全且可用的方式来执行此操作? (不,在这种情况下,不能选择Nuget。)

“全球目标”文件示例:

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Product1Version>02.01.01</Product1Version>
    <Product2Version>03.02.01</Product2Version>
    <ReferencesPath>..\..\References</ReferencesPath>
    <Product1ReferencePath>$(ReferencesPath)\Product1\$(Product1Version)</Product1ReferencePath>
    <Product2ReferencePath>$(ReferencesPath)\Product2\$(Product2Version)</Product2ReferencePath>
  </PropertyGroup>
</Project>

以下是我打算如何在csproj文件中使用此示例:

  <Import Project="..\..\Build\SolutionReferences.targets" Condition="false" />
  <ItemGroup>
    <Reference Include="Product1">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>$(Product1ReferencePath)\Product1.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="Product2">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>$(Product2ReferencePath)\Product2.dll</HintPath>
      <Private>False</Private>
    </Reference>
  </ItemGroup>

1 个答案:

答案 0 :(得分:0)

呃...我要做的就是从Condition="false"命令中删除Import。 :(