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

时间:2014-02-19 02:04:06

标签: .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=Client" source.cs。 (当然,没有选项/targetFramework ...)

2 个答案:

答案 0 :(得分:4)

如果需要在运行时编译,那么你应该考虑providers in System.CodeDOM,它允许编译而不需要调用单独的进程。

要回答您的原始问题,如果您在Visual Studio中将MSBuild详细程度转换为详细信息(选项 - 项目和解决方案 - 构建并运行)并构建针对客户端配置文件的项目,您将在构建输出中看到这一点: / p>

Csc.exe (stuff...) Program.cs Properties\AssemblyInfo.cs "C:\...\Temp\.NETFramework,Version=v4.0,Profile=Client.AssemblyAttributes.cs"

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

[assembly: TargetFrameworkAttribute(".NETFramework,Version=v4.0,Profile=Client", FrameworkDisplayName = ".NET Framework 4 Client Profile")]

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

答案 1 :(得分:2)

TargetFramework只能在Project文件中配置,不能作为切换器传递给CSC.exe,请参阅下面示例 TargetFrameworkVersion TargetFrameworkProfile 的设置< / p>

因此,动态设置的唯一方法是使用以下设置修改项目文件,如果要设置客户端配置文件,则使用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>

目标.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>