首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >csproj属性条件

csproj属性条件
EN

Stack Overflow用户
提问于 2011-03-15 19:38:32
回答 2查看 5.2K关注 0票数 3

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

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

有什么提示吗?

谢谢,Horea

EN

回答 2

Stack Overflow用户

发布于 2011-03-15 20:56:29

您也许能够使用静态方法System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable

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

代码语言:javascript
复制
<?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>
票数 7
EN

Stack Overflow用户

发布于 2011-03-15 23:22:17

我认为@Zach Bonham的anwer解决了一个有点不同的问题。我不知道我可以使用的静态函数有exists限制,File.Exists也包括在内,但Directory.Exists不包括在内。因此,有必要使用@Zach Bonham提出的自定义任务。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<Project 
  ToolsVersion="4.0"
  xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
  InitialTargets="SetLocation"
  >

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

    <ParameterGroup>
      <Exists ParameterType="System.Boolean" Output="true" />
      <DirectoryPath Required="true" ParameterType="System.String" />
    </ParameterGroup>
    <Task>
      <Code Type="Fragment" Language="cs">
        Exists = System.IO.Directory.Exists(DirectoryPath);
      </Code>
    </Task>
  </UsingTask>

  <PropertyGroup>
    <NetworkLocation>\\192.168.1.1\some\path</NetworkLocation>
    <DefaultNetworkLocation>\\127.0.0.1\default\location</DefaultNetworkLocation>
  </PropertyGroup>

  <Target Name="SetLocation">
    <IsDirectoryExists DirectoryPath="$(NetworkLocation)">
      <Output PropertyName="NetworkLocationExists" TaskParameter="Exists" />
    </IsDirectoryExists>

    <PropertyGroup>
      <UseLocation Condition="'$(NetworkLocationExists)'=='true'">$(NetworkLocation)</UseLocation>
      <UseLocation Condition="'$(UseLocation)'==''">$(DefaultNetworkLocation)</UseLocation>
    </PropertyGroup>

    <Message Text="NetworkLocationExists: $(NetworkLocationExists)" />
    <Message Text="UseLocation: $(UseLocation)" />
  </Target>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5311156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档