2011-03-15 6 views
2

Je voudrais ajouter une propriété avec une condition au fichier csproj.csproj propriété condition

condition est: si un emplacement réseau est disponible, ma propriété doit avoir cette valeur, sinon un autre endroit.

Un conseil?

grâce, Horea

Répondre

6

Vous pourriez être en mesure d'utiliser la méthode statique System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable.

Malheureusement, je ne pense pas que vous pouvez invoquer cette méthode statique directement à partir d'une condition choisie pour définir votre PropertyGroup. Vous devrez peut-être écrire une tâche MSBuild en ligne personnalisée pour le faire pour vous.

<?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> 
1

Je pense que la réponse de @Zach Bonham résout un problème un peu différent. Je ne savais pas qu'il y a exists limitation sur les fonctions statiques que je peux utiliser et File.Exists est inclus, mais Directory.Exists n'est pas inclus. Donc, il existe une nécessité d'utiliser une tâche personnalisée comme proposé par @Zach Bonham.

<?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> 

Questions connexes