我的一位同事对他的开发环境(Win 7 + VS 2010)有一点问题:
我们有一个类librairy项目引用.net 2.0,如果我们使用“Debug”构建它并使用Reflector打开它,如果我们使用“Release”配置构建它,我们可以看到“Target Runtime:2.0 ...” ,我们可以看到“Target Runtime:v4.0”(如果我们在测试服务器中使用它,我们会收到消息错误,例如“此程序集是由比新的运行时更新的”)
在项目属性中,我可以看到“.net framework 2.0”。在我的.csproj中,我有
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
你知道吗?
编辑
这是我的.csproj的开头
<Project ToolsVersion="2.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{E7122A64-C206-47EB-A511-763FF9C9D560}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ControlSkin3</RootNamespace>
<AssemblyName>ControlSkin3</AssemblyName>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Nonshipping>true</Nonshipping>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<CodeAnalysisCulture>en-en</CodeAnalysisCulture>
<TargetCulture>en-en</TargetCulture>
<SccProvider>SAK</SccProvider>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
</PropertyGroup>
答案 0 :(得分:2)
我遇到了同样的问题,VS10中的3.5目标类库在Reflector中出现了v4.0的目标运行时,并且在唯一的supportedRuntime设置为v2.0的应用程序中使用时会出现问题。
在我的情况下,它与一个构建后的事件有关,这个事件解组装会做一些魔术,然后再像这样“组装”它:
call "$(DevEnvDir)..\Tools\vsvars32.bat"
ildasm "$(TargetFileName)" /out=myassembly.il /nobar /linenum
magic.exe myassembly.il ilasm myassembly.changed.il
ilasm myassembly.changed.il /DLL /OUTPUT="$(TargetFileName)"
这在VS2008中工作正常,因为路径环境变量指向框架的v2.0版本。在VS 2010中,它们似乎指向v4.0版本,因此当处理IL时,它会创建4.0代码。
ilasm.exe没有开关告诉它为v2.0版本构建,但是在每个框架版本的特定版本中都存在。为了解决这个问题,我确实指定了工具的完整路径:
call "$(DevEnvDir)..\Tools\vsvars32.bat"
"%WindowsSdkDir%bin\ildasm "$(TargetFileName)" /out=myassembly.il /nobar /linenum
magic.exe myassembly.il ilasm myassembly.changed.il
%FrameworkDir%\v2.0.50727\ilasm myassembly.changed.il /DLL /OUTPUT="$(TargetFileName)"