如何在csproj文件中设置LIB环境变量?

本文关键字:设置 LIB 环境变量 文件 csproj | 更新日期: 2023-09-27 18:01:19

我在一个环境变量LIB被设置为"——must-override——"的系统上操作。我不能在系统本身上更改变量的值。

在Visual Studio中,在编译期间检查LIB变量。因为它被设置为垃圾值,所以我在构建中得到一个警告:

在LIB环境变量中指定的无效搜索路径'——must-override——'——系统无法找到指定的路径。

我想去掉这个警告。要做到这一点,我需要覆盖VS使用的LIB环境变量的值,要么为NULL,要么为指向实际路径的某个值。

由于不能在环境中更改变量的值,因此需要在csproj文件本身中进行更改。我试过在属性组中设置它,但无济于事:

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

关于如何设置这个变量有什么想法吗?或者这是否可能?

如何在csproj文件中设置LIB环境变量?

您可以使用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>