msbuild - csproj 属性条件

标签 msbuild csproj

我想在 csproj 文件中添加一个带有条件的属性。

条件是:如果网络位置可用,我的属性应具有该值,否则为另一个位置。

有什么提示吗?

谢谢, 霍雷亚

最佳答案

您也许可以使用静态方法 System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable .

不幸的是,我认为您不能直接从选择条件调用此静态方法来设置您的 PropertyGroup。您可能需要编写一个自定义内联 MSBuild 任务来为您执行此操作。

<?xml version="1.0" encoding="utf-8"?>
<Project 
    ToolsVersion="4.0"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
    InitialTargets="Test"
    DefaultTargets="Test"
    >
      <Choose>
        <When Condition="$(IsConnected) == 'True'">
            <PropertyGroup>
                <ConnectMessage>You are connected</ConnectMessage>  
            </PropertyGroup>
        </When>

        <Otherwise>
            <PropertyGroup>
                <ConnectMessage>You are NOT connected</ConnectMessage>
            </PropertyGroup>
        </Otherwise>

      </Choose>


      <UsingTask 
        TaskName="GetConnectionStatus" 
        TaskFactory="CodeTaskFactory"
        AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">

        <ParameterGroup>
          <IsConnected ParameterType="System.String" Output="true" />
        </ParameterGroup>
        <Task>
          <Code Type="Fragment" Language="cs">
            IsConnected = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable().ToString();
          </Code>
        </Task>
      </UsingTask>


    <Target Name="Initialize">

        <GetConnectionStatus>
          <Output PropertyName="IsConnected" TaskParameter="IsConnected" />
        </GetConnectionStatus>

        <PropertyGroup>
            <ConnectMessage Condition="$(IsConnected) == 'True'">You Are Connected</ConnectMessage>
        </PropertyGroup>

        <Message Text="ConnectionStatus $(IsConnected)"/> 
        <Message Text="$(ConnectMessage)"/>
    </Target>

    <Target Name="Test" DependsOnTargets="Initialize">

        <Message Text="$(ConnectMessage)"/>

    </Target>
</Project>

关于msbuild - csproj 属性条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5311156/

相关文章:

msbuild无法编译vsto项目

.net - 什么是 csproj 文件中的 <MvcProjectUpgradeChecked> 元素

visual-studio - 为什么 Visual Studio 会在项目文件中留下一个空的 ItemGroup 节点?

deployment - 尝试使用 TeamCity 8 部署 SSDT 项目时文件名无效

msbuild - 错误创建应用程序包(UWP,Appx) - fatal error CMF1106 : failed to open input PDB file for reading

gradle - 调用gradle脚本build.gradle并设置是否应该构建调试/发布风格并编写通用任务?

delphi - 为什么 Delphi 命令行为我提供了与 IDE 不同的输出?

c# - 如何从 .NetStandard 类库中引用 net40 框架程序集?

.net - 是否可以恢复启用 EmbedAllSources 构建的 nuget 包的源代码?

c# - VisualStudio 解决方案中的条件项目路径变量