0

LIB環境変数が「--must-override--」に設定されているシステムで操作しています。システム自体の変数の値を変更できません。

Visual Studio では、コンパイル中に LIB 変数がチェックされます。ジャンク値に設定されているため、ビルドで警告が表示されます。

'LIB 環境変数' で指定された無効な検索パス '--must-override--' -- '指定されたパスが見つかりません。

この警告を取り除きたいです。そのためには、LIBVS が使用する環境変数の値を、NULL または実際のパスを指す値にオーバーライドする必要があります。

環境内の変数の値を変更できないため、csproj ファイル自体で変更する必要があります。私はそれをプロパティグループに設定しようとしましたが、役に立ちませんでした:

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

この変数を設定する方法についてのアイデアはありますか? または、それが可能である場合は?

4

1 に答える 1

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を基本と一緒に投げました - 私はそれらを実行すると正しく設定されることを確認しました - 私はインラインタスクアプローチにも追加しました.

<?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>
于 2013-02-26T21:18:06.213 に答える