简体   繁体   中英

How to specify .net target framework when building c# dll in Visual Studio Command Prompt 2010?

I'm not very familiar with building dlls, nor with Visual Studio for that matter. But I have a couple of files in Unity3d which I always build a DLL using Visual Studio Command Prompt 2010. That seems to work fine, except is builds to .net target framework 4, and it needs to be 3.5 to work with Unity. However, I can't find the command line argument to specify this.

So, that's my question, how do I specify this in the command prompt? (if possible)

您应该能够进入项目属性(右键单击解决方案中项目名称上的+属性)并在那里指定目标框架。

TargetFramework can be configured in the Project file only and can't be passed as a switch to CSC.exe, see settings for TargetFrameworkVersion and TargetFrameworkProfile in below example.

So the only way to dynamically set is to modify the project file with below setting and compile with csc.exe if you want to set Client Profile

Targetting .NET Framework 4.0 Client Profile

<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>

Targetting .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>

With MSBuild.exe:

msbuild.exe MyProj.proj /p:TargetFrameworkVersion=v2.0;Configuration=Release /tv:3.5

therefore overriding the value in the proj file as well as the ToolsVersion.

To find out which msbuild version default is used, start a Visual Studio Command prompt ( found in the Start menu > Microsoft Visual studio 2010 > Visual Studio Tools) and type msbuild. The first line of the output will hold your BuidEngineversion:

Microsoft (R) Build Engine Version 4.0.30319.1

From the msdn doc:

MSBuild uses a tool set of tasks, targets, and tools to build an application. Typically, a MSBuild tool set includes a microsoft.common.tasks file, a microsoft.common.targets file, and compilers such as csc.exe and vbc.exe. Most tool sets can be used to compile applications to more than one version of the .NET Framework and more than one system platform

You could aslo check the Environment vars for a version of the framework installed: set F from the Visual Studio Command prompt gives me this result:

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

ToolSet Explanation ToolSetVersion

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM