Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为MSBuild指定平台?_Msbuild - Fatal编程技术网

如何为MSBuild指定平台?

如何为MSBuild指定平台?,msbuild,Msbuild,我正在尝试使用MSBuild构建具有指定目标平台的解决方案(我需要两个二进制文件,x86和x64)。我就是这样尝试的: C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86" 但是,如果平台与“任何CPU”不同,构建总是失败。我做错了什么 这是MSBuild打印时的输出: C:\WINDOW

我正在尝试使用MSBuild构建具有指定目标平台的解决方案(我需要两个二进制文件,x86和x64)。我就是这样尝试的:

C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86"
但是,如果平台与“任何CPU”不同,构建总是失败。我做错了什么

这是MSBuild打印时的输出:

C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln/t:重建 /配置=发布 /p:Platform=“x86”Microsoft(R)Build 引擎版本3.5.30729.1[Microsoft .NET框架,版本 2.0.50727.3082]版权所有(C)微软公司2007。所有权利 保留的

构建开始于2010年7月1日8:28:10。 上的项目“SolutionPath\Solution.sln” 节点0(重建目标t)。 SolutionPath\Solution.sln:错误 MSB4126:指定的解决方案无效 配置“Release | x86”为 无效的请指定一个有效的 解决方案c使用 配置和平台属性 (例如,MSBuild.exe Solution.sln /p:配置=调试 /p:Platform=“任意CPU”)或将这些 属性为空以使用默认值 解决方案配置。建成 项目“SolutionPath\Solution.sln” (重建目标)--失败

生成失败

“SolutionPath\Solution.sln”(重建 目标(1)-> (验证解决方案配置目标) ->SolutionPath\Solution.sln:错误MSB4126:指定的解决方案无效 配置“Release | x86”为 无效的请指定一个有效的 使用 配置和平台属性 (例如MSBuild.ex e Solution.sln /p:配置=调试 /p:Platform=“任意CPU”)或将这些 属性为空以使用默认值 解决方案配置

0 Warning(s)
1 Error(s)
时间流逝00:00:00.03


如果我尝试使用devenv为x86/x64构建它,那么它可以完美地工作,但是我尝试在不安装所有必需版本的VisualStudio的情况下设置构建服务器。顺便说一句,如果有更好的免费工具(支持.NET framework 4),我很想听听。如果您想为x86和x64构建解决方案,您的解决方案必须针对这两种平台进行配置。实际上,您只有一个任何CPU配置

0 Warning(s)
1 Error(s)
如何检查项目的可用配置 要检查给定项目的可用配置,请打开项目文件(
*.csproj
),然后查找具有正确
条件的
属性组

如果要在
x86
Release
模式下生成,则必须在项目文件中包含以下内容:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
  ...
</PropertyGroup>

...
如何在VisualStudio中创建和编辑配置
(来源:)


(来源:)


(来源:)


(在MSDN上)

如果您试图从命令行执行此操作,您可能会遇到一个问题,即为您设置了一个机器范围的环境变量“Platform”,并对您不利。如果我使用VS2012命令窗口而不是常规的windows命令窗口,我可以重现这种情况

在命令提示下,键入:

站台

在VS2012命令窗口中,我的预设值为“X64”。这似乎干扰了解决方案文件中的任何内容

在常规命令窗口中,“set”命令会产生“variable not defined”(未定义变量)消息…这很好


如果上面的“set”命令的结果未返回任何环境变量值,则可以继续执行。

在MSBuild或Teamcity中使用命令行

MSBuild yourproject.sln /property:Configuration=Release /property:Platform=x64
或使用较短的形式:

MSBuild yourproject.sln /p:Configuration=Release /p:Platform=x64

不过,无论如何,您都需要在项目中设置平台,请参见Julien Hoarau的答案。

关于VS2017和2019。。。使用,可以在构建过程中更改平台。下面是一个在内置
CoreCompile
任务运行之前更改为
anycpu
平台的示例:

<Project Sdk="Microsoft.NET.Sdk" >

  <Target Name="SwitchToAnyCpu" BeforeTargets="CoreCompile" >
    <Message Text="Current Platform=$(Platform)" />
    <Message Text="Current PlatformTarget=$(PlatformName)" />
    <PropertyGroup>
      <Platform>anycpu</Platform>
      <PlatformTarget>anycpu</PlatformTarget>
    </PropertyGroup>
    <Message Text="New Platform=$(Platform)" />
    <Message Text="New PlatformTarget=$(PlatformTarget)" />
  </Target>

</Project>

任意CPU
任意CPU
在我的例子中,我正在构建一个带有
BeforeTargets
BeforeTargets
任务的FPGA,但是在主
CoreCompile
中编译一个C#app。(部分原因是我可能需要某种命令行应用程序,部分原因是我不知道如何省略或覆盖
CoreCompile


要为多个并发二进制文件(如x86和x64)生成:需要一个单独的手动生成任务,或者需要两个单独的项目文件,分别具有示例中的
x86
x64
设置,以上。

当您在visual studio解决方案中使用工具(如)为项目定义不同的生成配置时,您可能希望Teamcity生成为您生成指定的生成配置。您可能已经定义了构建配置,例如调试、发布、开发、UAT、产品等。这意味着您将为不同的配置设置MSBuild配置转换。当您针对不同的环境具有不同的配置(例如,不同的数据库连接字符串)时,通常会使用这些不同的配置。这是非常常见的,因为生产环境的数据库与开发环境的数据库不同

他们说一张图片抵得上千言万语,请参见下图,您将如何在Teamcity中指定多个构建配置

在命令行输入文本框中,指定如下内容

/p:OutputPath=Publish;配置=开发

在这里,我分别使用值
Publish
Dev
指定了两个命令行构建配置/参数
OutputPath
和build
Configuration
,但它可能是,
UAT
Prod
配置。如果您想要更多,只需用分号分隔它们,


我在VS2017中遇到了一个奇怪的例子,关于“Any”和“CP”之间的空格
<MSBuild Projects="@(SolutionToBuild1)" Properties ="Configuration=$(ProjectConfiguration);Platform=$(ProjectPlatform);Rerun=$(MsBuildReRun);" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
msbuild C:\Users\Project\Project.publishproj /p:Platform="AnyCPU"  /p:DeployOnBuild=true /p:PublishProfile=local /p:Configuration=Debug
<Prefer32Bit>false</Prefer32Bit>