我有xyz.csproj,它有自定义的构建任务目标。然后,目标文件指向我的自定义构建任务程序集(它是在AnyCPU中构建的)。我在构建任务程序集中有一些代码,需要可靠地加载x64来执行一些验证。
在Visual 2013中生成xyz.csproj时,当自定义生成任务程序集试图加载x64 dll时,会引发一个错误的图像格式异常。我在构建任务代码中做了一条日志消息,它将x86输出到visual输出窗口。
如何强制我的自定义生成任务代码在x64中运行?
我试图在目标文件中的Architecture=节点上指定UsingTask“x64”属性,也尝试将MSBuildArchitecture="x64“作为指定的在这篇msdn文章中。似乎什么都起不到作用。
如何解决这个问题,有什么建议吗?
发布于 2014-06-24 17:52:44
根据我提到的msdn文章,实际上可以在Visual 2013中运行自定义构建任务,以x64显式模式运行。现在,构建任务代码能够加载x64 dll并执行运行所需的验证。
下面是如何将自定义目标文件更改为:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="SuperCustomTask"
AssemblyFile="$(PathToCustomTaskDllEnvVariable)\SuperCustomTasks.dll"/>
<Target Name="SuperCustomTask">
<TCXBuildTask PlatformName="$(Platform)"
ProjectName="$(MSBuildProjectFullPath)"
MSBuildRuntime="*"
MSBuildArchitecture= "x64"/>
</Target>
</Project>事实上,我在另一个文本编辑器(我的notepad++)中打开了这个目标文件,这将导致异常“在另一个程序中更改配置文件”,并且构建将失败。
一旦关闭了打开目标文件的所有编辑器,VS就能够很好地执行它。吸取教训。
感谢莱克斯-李和塞瓦?蒂托夫的投入。
发布于 2014-06-24 07:26:46
Visual 2013使用MSBuild 12.0,默认情况下使用32位工具链。因此,它只能加载32位(或AnyCPU)任务。
根据这篇文章,您可以在C:\Program Files (x86)\MSBuild\12.0\Bin\amd64找到64位工具链。如果您在命令提示符下启动它,它可以占用您的64位(或任何CPU)任务。
Architecture属性用于设置与比特相关的任务。如果您确实有与比特相关的任务,请确保同时配置32位和64位,以便无论使用哪个MSBuild工具链(32位还是64位),都可以找到并执行任务。只提供64位的任务确实是个坏主意。
https://stackoverflow.com/questions/24378792
复制相似问题