我已按照this answer中的指南
将以下自定义任务添加到我的项目文件中<UsingTask
TaskName="SetEnvironmentVariable"
TaskFactory="CodeTaskFactory"
AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v$(MSBuildToolsVersion).dll">
<ParameterGroup>
<Name/>
<Value/>
</ParameterGroup>
<Task>
<Using Namespace="System" />
<Code Type="Fragment" Language="cs">
<![CDATA[
Environment.SetEnvironmentVariable(Name, Value);
]]>
</Code>
</Task>
</UsingTask>
<Target Name="BeforeBuild">
<PropertyGroup>
<TargetServer Condition="'$(TargetServer)' == ''">localhost</TargetServer>
</PropertyGroup>
<SetEnvironmentVariable Name="TARGET_SERVER" Value="$(TargetServer)"/>
</Target>
当我尝试在Visual Studio 2013中构建项目时失败但是当我使用MSBuild从命令行构建项目时成功(我使用的是Visual Studio 2013更新2)。
Visual Studio的错误消息是:
Target "BeforeBuild: (TargetId:13)" in project "D:\Dev\Tests.csproj" (target "Build" depends on it):
Initializing task factory "CodeTaskFactory" from assembly "C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Build.Tasks.v12.0.dll".
Using "SetEnvironmentVariable" task from the task factory "Code Task Factory".
Task "SetEnvironmentVariable" (TaskId:14)
D:\Dev\Tests.csproj(130,29): error MSB4064: The "Name" parameter is not supported by the "SetEnvironmentVariable" task. Verify the parameter exists on the task, and it is a settable public instance property.
D:\Dev\Tests.csproj(130,5): error MSB4063: The "SetEnvironmentVariable" task could not be initialized with its input parameters.
Done executing task "SetEnvironmentVariable" -- FAILED. (TaskId:14)
为什么会出现这种情况?
正如您从输出中看到的那样,我已经将MSBuild的输出转换为诊断级别,但是没有提供任何进一步的线索。我也尝试过使用MSBuildToolsVersion来确保它引用了正确的版本(v12.0)。
据我所知,这些问题应该成为过去MSBuild is now embedded in Visual Studio。我整个上午都努力使用谷歌找到这个问题的答案,但似乎这不是一个非常常见的错误信息,现在我很难过。
答案 0 :(得分:0)
看一下您所关注的指南,您会注意到您的XML缺少该指南中提供的某些属性:
更新此内容:
<ParameterGroup>
<Name />
<Value />
</ParameterGroup>
阅读:
<ParameterGroup>
<Name ParameterType="System.String" Required="true" />
<Value ParameterType="System.String" Required="true" />
</ParameterGroup>
答案 1 :(得分:0)
我有同样的问题我正在编辑包含任务的目标文件,所以我的情况可能会有所不同。但重新启动VS解决了它,我猜我正在编辑的目标正在被缓存,所以没有看到我的更改。