我在环境变量LIB
设置为“--must-override--”的系统上运行。我无法在系统本身上更改变量的值。
在Visual Studio中,在编译期间检查LIB变量。因为它设置为垃圾值,我在构建中收到警告:
“LIB环境变量”中指定的搜索路径“--must-override--”无效 - 系统无法找到指定的路径。
我想摆脱这个警告。为此,我需要覆盖VS使用的LIB
环境变量的值,或者为NULL或指向实际路径的某个值。
由于我无法在环境中更改变量的值,因此我需要在csproj文件中自行完成。我试过在一个属性组中设置它无济于事:
<PropertyGroup>
<Lib></Lib>
</PropertyGroup>
有关如何设置此变量的任何想法?或者,如果它甚至可能?
答案 0 :(得分: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)" />
编辑: 所以我只是将这个csproj与基础知识结合在一起 - 我已经确认它们在运行时已经正确设置了 - 我已经添加了内联任务方法。
<?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>