New*_*bee 6 c# msbuild command-line visual-studio-2010
我有一个VS10项目文件(.csproj).我正在使用命令行中的MSBuild构建此项目.我有一个简单的问题,我一直试图弄清楚.这些命令行参数之间有什么区别: -
1. >MSBuild MyProg.csproj /p:Configuration="Release"
2. >MSBuild MyProg.csproj /p:Platform="AnyCPU" /p:Configuration="Release"
3. >MSBuild MyProg.csproj /p:Platform="x86" /p:Configuration="Release"
Run Code Online (Sandbox Code Playgroud)
在csproj文件中,我有这个PropertyGroup标记
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
我想知道当您在命令行参数中指定平台时,以及何时不这样做时,它会有什么不同.我一直在尝试使用命令行中的verbosity参数/ v:d来调查这一点,但除了每个构建的平台不同之外我找不到任何区别.
当我没有在命令行中传递平台时,平台会是什么?当我通过x86而不是AnyCPU时会发生什么?
谢谢
Han*_*ant 11
.csproj文件始终确保使用以下行选择默认平台:
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
Run Code Online (Sandbox Code Playgroud)
换句话说,如果没有设置$(平台),那么它会选择一个固定的默认值,在这种情况下为AnyCPU.如果您故意删除此行,则需要将其还原.如果它从未出现过,请添加它.这可以解决您的问题:
当我没有在命令行中传递平台时,平台会是什么?
它将由该行设置,在这种情况下为AnyCPU.
当我通过x86而不是AnyCPU时会发生什么?
然后你得到你要求的平台选择,x86.
请注意,<Platform>在纯C#项目中它是无用的.它对C++项目很重要,因为在构建C++项目时必须使用不同的工具集,它需要使用32位或64位编译器和链接器.ARM内核的编译器/链接器与英特尔内核有很大不同.这不是C#的情况,你使用完全相同的编译器,你得到完全相同的程序集.抖动是在运行时处理处理器体系结构的抖动.
唯一有所作为的财产是<PlatformTarget>.你总是喜欢AnyCPU,尤其是课堂图书馆项目.您可能需要使用x86的EXE项目(身高在VS2012 32位及以上),如果你知道你有32位非托管代码的依赖.但这是你事先知道的一个事实,当你构建EXE时,选择在AnyCPU和x86之间切换是没有意义的.
因此,拥有多个平台毫无意义,只需要一个就足够了.这最终解决了你的问题,只是消除了选择.
| 归档时间: |
|
| 查看次数: |
6033 次 |
| 最近记录: |