.net 命令行编译器中的多目标(csc.exe)

.net 命令行编译器中的多目标(csc.exe),.net,.net,我的问题很简单:如何在命令行编译器(csc.exe)中进行多目标定位,特别是对.Net 4客户机配置文件的多目标定位 编辑:好吧,我的问题太简单了吗 针对.net 4.5的编译器是%windir%\Microsoft.net\Framework\v4.0.30319\csc.exe。当我运行csc source.cs时,输出的目标是.net 4.5 我想在命令行编译器(csc.exe)中以.net 4客户端配置文件为目标,例如csc/targetFramework=“v4.0;profile=

我的问题很简单:如何在命令行编译器(csc.exe)中进行多目标定位,特别是对.Net 4客户机配置文件的多目标定位


编辑:好吧,我的问题太简单了吗

针对.net 4.5的编译器是
%windir%\Microsoft.net\Framework\v4.0.30319\csc.exe
。当我运行
csc source.cs
时,输出的目标是.net 4.5


我想在命令行编译器(csc.exe)中以.net 4客户端配置文件为目标,例如
csc/targetFramework=“v4.0;profile=client”source.cs
。(当然,没有选项
/targetFramework
..)

targetFramework只能在项目文件中配置,不能作为开关传递到CSC.exe,请参见下面示例中的TargetFrameworkVersionTargetFrameworkProfile的设置

因此,动态设置的唯一方法是使用以下设置修改项目文件,如果要设置客户端配置文件,请使用csc.exe进行编译

针对.NET Framework 4.0客户端配置文件

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{A5F58561-47CA-482A-83E0-1D43C312B0A7}</ProjectGuid>
    <OutputType>Exe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>ConsoleApplication1</RootNamespace>
    <AssemblyName>ConsoleApplication1</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkProfile>Client</TargetFrameworkProfile>
  </PropertyGroup>

调试
任意CPU
{A5F58561-47CA-482A-83E0-1D43C312B0A7}
Exe
性质
控制台应用程序1
控制台应用程序1
v4.0
512
客户
以.NET Framework 4.0为目标

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{A5F58561-47CA-482A-83E0-1D43C312B0A7}</ProjectGuid>
    <OutputType>Exe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>ConsoleApplication1</RootNamespace>
    <AssemblyName>ConsoleApplication1</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkProfile></TargetFrameworkProfile>
  </PropertyGroup>

调试
任意CPU
{A5F58561-47CA-482A-83E0-1D43C312B0A7}
Exe
性质
控制台应用程序1
控制台应用程序1
v4.0
512

TargetFramework只能在项目文件中配置,不能作为开关传递到CSC.exe,请参见下面示例中的TargetFrameworkVersionTargetFrameworkProfile的设置

因此,动态设置的唯一方法是使用以下设置修改项目文件,如果要设置客户端配置文件,请使用csc.exe进行编译

针对.NET Framework 4.0客户端配置文件

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{A5F58561-47CA-482A-83E0-1D43C312B0A7}</ProjectGuid>
    <OutputType>Exe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>ConsoleApplication1</RootNamespace>
    <AssemblyName>ConsoleApplication1</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkProfile>Client</TargetFrameworkProfile>
  </PropertyGroup>

调试
任意CPU
{A5F58561-47CA-482A-83E0-1D43C312B0A7}
Exe
性质
控制台应用程序1
控制台应用程序1
v4.0
512
客户
以.NET Framework 4.0为目标

<PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{A5F58561-47CA-482A-83E0-1D43C312B0A7}</ProjectGuid>
    <OutputType>Exe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>ConsoleApplication1</RootNamespace>
    <AssemblyName>ConsoleApplication1</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <TargetFrameworkProfile></TargetFrameworkProfile>
  </PropertyGroup>

调试
任意CPU
{A5F58561-47CA-482A-83E0-1D43C312B0A7}
Exe
性质
控制台应用程序1
控制台应用程序1
v4.0
512

< /代码> 如果需要在运行时编译,则应考虑允许编译而不调用单独的进程。

要回答最初的问题,如果将MSBuild详细信息转换为Visual Studio中的详细信息(选项-项目和解决方案-生成和运行),并生成一个针对客户端配置文件的项目,则会在生成输出中看到以下内容:

Csc.exe(stuff…)Program.cs Properties\AssemblyInfo.cs“C:\…\Temp\.NETFramework,版本=v4.0,概要文件=Client.AssemblyAttributes.cs”

引号中的路径实际上是生成的临时文件,包含:

[程序集:TargetFrameworkAttribute(“.NETFramework,版本=v4.0,概要文件=Client”,FrameworkDisplayName=“.NET Framework 4客户端概要文件”)]


这样,如果您直接调用CSC,您应该能够在自己的代码中使用该属性。

如果您需要在运行时编译,那么您应该考虑允许编译而不调用单独的进程。

要回答最初的问题,如果将MSBuild详细信息转换为Visual Studio中的详细信息(选项-项目和解决方案-生成和运行),并生成一个针对客户端配置文件的项目,则会在生成输出中看到以下内容:

Csc.exe(stuff…)Program.cs Properties\AssemblyInfo.cs“C:\…\Temp\.NETFramework,版本=v4.0,概要文件=Client.AssemblyAttributes.cs”

引号中的路径实际上是生成的临时文件,包含:

[程序集:TargetFrameworkAttribute(“.NETFramework,版本=v4.0,概要文件=Client”,FrameworkDisplayName=“.NET Framework 4客户端概要文件”)]


因此,如果您直接调用csc,您应该能够在自己的代码中使用该属性。

您能更具体一点吗?@JohnSaunders请参阅editCan您不能正确配置.csproj并使用msbuild吗?@JaimeTorres Humm。。那么你能告诉我如何在“运行时”中制作.csproj吗?我需要在运行时编译,例如
Process.Start(“csc source.cs”)
(我不知道如何编写msbuild项目文件(语法等)。如果您能告诉我如何……,我将非常感谢您的帮助。)@ikh“运行时”是什么意思?您是否动态生成整个应用程序,然后编译它们?如果是这样,您只需为.csproj文件使用模板并手动创建即可。这是一个简单的XML文件,所以应该不难。您能更具体一点吗?@JohnSaunders请参阅edit您能不能正确配置您的.csproj并使用msbuild?@jaimetores Humm。。那么你能告诉我如何在“运行时”中制作.csproj吗?我需要在运行时编译,例如
Process.Start(“csc source.cs”)
(我不知道如何编写msbuild项目文件(语法等)。如果您能告诉我如何……,我将非常感谢您的帮助。)@ikh“运行时”是什么意思?您是否动态生成整个应用程序,然后编译它们?如果是这样,您只需为.csproj文件使用模板并手动创建即可。这是一个简单的XML文件,所以应该不难。我说的“在运行时编译”,就像
Process.Start(“csc”)
。。无论如何,谢谢你!我说的“在运行时编译”,就像是
Process.Start(“csc”)
。。无论如何,谢谢你!