2

考虑 .sln 文件中的以下片段:

...
# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MainApp", "MainApp\MainApp.csproj", "{FC66E4A5-0538-47DC-B450-788B98D9461E}"
EndProject
...

以及来自相应 MainApp.csproj 文件的以下片段:

...
<ItemGroup Condition="$(LibAProjRef) == false">
  <Reference Include="LibA, Version=1.0.0.0, Culture=neutral">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>..\..\Lib\LibA.dll</HintPath>
  </Reference>
</ItemGroup>
<ItemGroup Condition="$(LibAProjRef) == true">
  <ProjectReference Include="..\LibA\LibA.csproj">
    <Project>{2A45F32B-182B-4B8D-A8A4-1BFBF2E81CAD}</Project>
    <Name>LibA</Name>
  </ProjectReference>
</ItemGroup>
...

基本上我在这里要做的是创建一个项目文件,该文件可以使用另一个库项目,或者已经构建,或者作为项目参考,这取决于库项目是否存在于解决方案中。

有没有办法将 .sln 文件中的属性传递给项目文件,以便我可以做到这一点?

或者:还有其他方法可以实现这一目标吗?

4

3 回答 3

0

您可以重新调整配置或平台属性的用途,这些属性可以在解决方案的下拉列表中设置,或者使用 Scott Bilas 提到的属性之一。

我劫持了 $(Configuration) 字段,但现在感谢 Scott 的评论:

<ProjectReference Include="$(SolutionDir)\..\DataLib\DataLib.csproj">

我猜您可以选择任何一种方式,并且您对条件的使用似乎是合理的。

于 2013-12-12T05:04:24.603 回答
0

我认为您不能从 .sln 文件中传递属性,因为 MSBuild 实际上适用于 XML 文件!

我能想到的是编写一个自定义 MSBuild 任务,并从 .sln 文件中读取所需的值。

于 2013-05-10T22:08:05.640 回答
0

我对构建后事件也有同样的需求。我在VS2015中使用了以下解决方案。

您可以在 PropertyGroup 标记内的 MainApp.csproj 中定义您的属性,如下所示:

  <PropertyGroup Label="Globals">
        <LibAProjRef>False</LibAProjRef>
  </PropertyGroup>

然后当您构建解决方案时,您可以说

MSBuild "MySln.sln" /m /t:rebuild /p:Configuration=Release /p:Platform=x64 /p:LibAProjRef=True

请注意,此处的属性是字符串,因此您的条件应该是

Condition="'$(LibAProjRef)' == 'True'"
于 2017-09-06T15:06:15.107 回答