我使用的MSBuild(通过恶性 )编译一堆VB.NET组件。 因为这些组件依赖COM互操作,我需要保证他们在32位模式下在64位操作系统的运行。 我能得到可执行组件通过改变在Visual Studio项目编译为32位,但我真的希望能够迫使所有的可执行文件进行编译生成服务器上的32位模式。
我已经尝试了一些命令行参数的MSBuild没有运气:
- / P:平台= win32的
- / P:平台= 86
- / P:ProcessorArchitecture用于= 86
我究竟做错了什么? 有一些参考到的MSBuild编译VB项目时所使用的属性?
如果组件本身总是会为32位,为什么不添加设置到.vbproj文件? 这将需要的MSBuild的方程。
只是下面的行添加到最初的PropertyGroup在.vbproj文件
<PlatformTarget>x86</PlatformTarget>
根据MSDN ,你正在做正确的事情。 貌似/p:Platform=x86
,但实际上,也许是/p:PlatformTarget=x86
。
尝试只与参数(确保这不是你的恶性文件中的问题调用的MSBuild直接,看看编译输出为正确生成配置( 调试 / 发布 )。
万一这会有所帮助,我用这个命令行来建立我的x86平台的目标:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe my.sln /t:build /p:Configuration=Release;Platform=x86
在解决方案资源管理器中,右键单击根节点- > 配置管理器 。 您需要定义一个解决方案范围的配置,指示内打造32位的每个项目。 (注:你可能已经有一个,如果你曾经设置过至少一个项目,建立32位。)对于一步一步的演练,请参阅MSDN博客文章的解决方案配置 。
然后,您可以指定你想要的“平台”和“味” 团队建设 .proj
/ .targets
文件。 例如:
<ConfigurationToBuild Include="Release|x86">
<FlavorToBuild>Release</FlavorToBuild>
<PlatformToBuild>x86</PlatformToBuild>
</ConfigurationToBuild>
您可以指定这些财产部分的多于一个有内置的几种组合。 我会复制/粘贴“释放| 86”字符串(或不管它看起来像),直接从您.sln
文件,以确保它完全匹配-你不能从Solution Explorer中直接得到它。
关于你的评论:
MSBuild的财产评估是非常复杂的,因为它混合声明和必要的风格。 请参阅博客文章的MSBuild资产评估的详细信息。 我不喜欢依靠其微妙之处。
这是真的,在命令行上指定的属性应该还有压倒一切,但团队建设具有另一层复杂性。 该ComputeConfigurationList任务是通过递归的MSBuild invokation一再呼吁,而不是作为一个普通的任务 。 它拉这一关的方式是采取普通的性质等PlatformToBuild
和在一组全局属性的称为包他们ConfigurationToBuild.PlatformToBuild
(等),其在运行中产生的,一旦为每个配置。 这使得团队构建引擎更加灵活的内部,但它也使黑客你想更难的命令行的行为。
你可以尝试设置ConfigurationToBuild.PlatformToBuild
直接在命令行上-它可能工作,我不知道。 但它肯定会阻止你在一个单一的构建定义不断建立一个以上的配置。 出于这个原因,我与我的建议上面贴。
经历了完全相同的问题,我使用的MSBuild的版本在交换C:\WINDOWS\Microsoft.NET\Framework64
...的版本,在C:\WINDOWS\Microsoft.NET\Framework
(无64
)和东西编译正好。
对于MSBuild的版本15是/ P:PlatformTarget = 86
在南特的MSBuild任务这个问题的答案:
<msbuild project="your.sln">
<property name="PlatformTarget" value="x86" />
</msbuild>
我用它来寻找合适的物业更实际的方法是通过打开.csproj的项目文件(在C#的情况下)中的一个,看到受影响的属性,当你从视觉选择“64” /“AnyCPU” /“86” STDIO。 即改变无论属性,你需要设置的命令行。 与Visual Studio 2015年它似乎是<纲要>。 所以,你可以调用的MSBuild用参数/ P:平台= x64和它应该工作。