C# 从命令行重写目标框架

C# 从命令行重写目标框架,c#,msbuild,C#,Msbuild,我想使用msbuild从命令行生成一个c#项目(.csproj),并以.Net2.0运行时为目标 我看到项目xml文件有两个感兴趣的标记 <Project ToolsVersion="4.0" ... 您需要msbuild的命令行参数才能执行此操作: msbuild.exe MyProj.proj /p:TargetFrameworkVersion=v2.0;Configuration=Release /tv:3.5 然后覆盖项目文件和工具版本中的值 要查找使用的msbuild版本默

我想使用
msbuild
从命令行生成一个
c#
项目(.csproj),并以.Net2.0运行时为目标

我看到项目xml文件有两个感兴趣的标记

<Project ToolsVersion="4.0" ... 

您需要msbuild的命令行参数才能执行此操作:

msbuild.exe MyProj.proj /p:TargetFrameworkVersion=v2.0;Configuration=Release /tv:3.5
然后覆盖项目文件和工具版本中的值

要查找使用的msbuild版本默认值,请启动Visual Studio命令提示符(位于“开始”菜单>“Microsoft Visual Studio 2010”>“Visual Studio工具”中),然后键入msbuild。 输出的第一行将保存您的内置发动机版本:

Microsoft(R)生成引擎版本4.0.30319.1

从msdn文档:

MSBuild使用一组任务、目标和工具来构建 应用通常,MSBuild工具集包括 microsoft.common.tasks文件、microsoft.common.targets文件和 编译器,如csc.exe和vbc.exe。大多数工具集可用于 将应用程序编译到.NET Framework的多个版本 以及多个系统平台

您还可以检查环境变量以获取安装的框架版本: Visual Studio命令提示符中的
set F
提供以下结果:

Framework35Version=v3.5
FrameworkDir=c:\Windows\Microsoft.NET\Framework\
FrameworkDIR32=c:\Windows\Microsoft.NET\Framework\
FrameworkVersion=v4.0.30319
FrameworkVersion32=v4.0.30319



如果toolsversion设置为4.0,生成的程序集是否会在v2.0运行时运行?是的,tv仅指示msbuild用于为请求的Framework生成程序集的工具(目标/编译器等)我看到在文件夹v2.0、v3.0和v4.0中有多个msbuild.exe,每个都有一个,哪一个最适合使用我不介意,使用运行默认值的。我希望它总是来自安装最高的工具集。因此,如果安装了4.0,它将使用4.0 msbuild。我无法从任何其他路径运行msbuild,除非我从框架目录本身运行它。是否有其他方法检查默认msbuild版本
msbuild myproj.csproj /p:Configuration=Release
msbuild.exe MyProj.proj /p:TargetFrameworkVersion=v2.0;Configuration=Release /tv:3.5