2013-02-26 2 views
0

Я работаю в системе, где переменная окружения LIB установлена ​​на «--must-override--». Я не могу изменить значение переменной в самой системе.Как установить переменную среды LIB внутри файла csproj?

В Visual Studio во время компиляции проверяется переменная LIB. Потому что он установлен в значение нежелательной, я получаю предупреждение в сборке:

Неверный путь поиска «--must-override--» указано в «переменной окружения LIB» - «Система не может найти путь указано.

Я хотел бы избавиться от этого предупреждения. Для этого мне нужно переопределить значение переменной окружения LIB, которое использует VS, либо NULL, либо некоторое значение, указывающее на реальный путь.

Поскольку я не могу изменить значение переменной в среде, мне нужно сделать это внутри самого файла csproj. Я пробовал установить его в группе свойств безрезультатно:

<PropertyGroup> 
    <Lib></Lib> 
</PropertyGroup> 

Любые идеи о том, как можно установить эту переменную? Или, если это возможно?

+0

Не совсем ясно, какой проект имеет эту переменную и какова цель в целом. Можете ли вы добавить несколько подробностей? –

+0

@BiserC Я отредактировал вопрос, чтобы попытаться сделать его более понятным. –

+3

SO пользователи, как правило, страдают от самых странных ран, нанесенных самим себе. Переменная среды применима только для проектов на C++. Простым обходным путем является создание каталога «--must-override--» в папке проекта. –

ответ

1

Вы можете калечить его в использовании Exec задачи, или вы можете написать свой собственный Task установить их - вот «Давайте калечить прочь с Exec» маршрут:

<PropertyGroup> 
    <!-- 
     need the CData since this blob is just going to 
     be embedded in a mini batch file by studio/msbuild 
    --> 
    <LibSetter><![CDATA[ 
set Lib=C:\Foo\Bar\Baz 
set AnyOtherEnvVariable=Hello! 
]]></LibSetter> 
</PropertyGroup> 

<Exec Command="$(LibSetter)" /> 

EDIT: Так что я просто выбросил этот csproj вместе с основами - я подтвердил, что они правильно устанавливаются, когда я запускаю их - я добавил также в inline-Task-подход.

<?xml version="1.0" encoding="utf-8" ?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <UsingTask 
     TaskName="EnvVarSet" 
     TaskFactory="CodeTaskFactory" 
     AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll"> 
     <ParameterGroup> 
      <VarName ParameterType="System.String" Required="true"/> 
      <VarValue ParameterType="System.String" Required="true" /> 
     </ParameterGroup> 
     <Task> 
      <Code Type="Fragment" Language="cs"> 
       <![CDATA[ 
        Console.WriteLine("Setting var name {0} to {1}...", VarName, VarValue); 
        System.Environment.SetEnvironmentVariable(VarName, VarValue); 
        Console.WriteLine("{0}={1}", VarName, VarValue); 
       ]]> 
      </Code> 
     </Task> 
    </UsingTask> 

    <Target Name="ThingThatNeedsEnvironmentVars"> 
     <CallTarget Targets="FiddleWithEnvironmentVars"/> 
     <Message Text="LIB environment var is now: $([System.Environment]::GetEnvironmentVariable('LIB'))"/> 
    </Target> 

    <Target Name="FiddleWithEnvironmentVars"> 
     <Message Text="LIB environment var is now: $([System.Environment]::GetEnvironmentVariable('LIB'))"/> 
     <EnvVarSet VarName="LIB" VarValue="C:\temp"/> 
     <Message Text="LIB environment var is now: $([System.Environment]::GetEnvironmentVariable('LIB'))"/> 
    </Target> 
</Project> 
+0

Кажется, что не работает для меня - я попытался проверить, поставив '' непосредственно перед и после инструкции Exec, и значение остается неизменным. –

+0

@AndyMagee Ну, вы хотите, чтобы эхо значение переменной среды LIB, правильно? поместите в аналогичный 'Exec', но вместо' set ... ', пусть он' echo% LIB% ' – JerKimball

+0

Согласно [MSDN] (http://msdn.microsoft.com/en-US/library/ms171459 (v = vs.110) .aspx), переменные среды должны быть доступны напрямую, как я пытался использовать '$ (LIB)' выше. В любом случае, даже при использовании 'echo% LIB%', значение не устанавливается. Он по-прежнему отражает первоначальное значение. –

Смежные вопросы