混合模式程序集构建错误:“built against 'v2.0.50727'”

9
首先,我已经在StackOverflow上找到了其他帖子(链接在此),但它并没有解决我的错误。
我有三个不同的环境/域,每个地点都有一个构建服务器。我的开发和用户接受测试环境可以成功构建,但是生产版本无法工作。
我收到以下错误:

混合模式的程序集是基于“v2.0.50727”版本的运行时构建的, 如果不提供附加配置信息,则无法在4.0运行时加载

我已将此标记添加到我的app.config文件中(这是我上面给出的链接中建议的修复方法)。
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>

除此之外,还有什么可能导致我的构建服务器/环境/域名之间出现这个问题的不同之处?

针对Allen的问题,我认为这就是你要问的:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
    <ProductVersion>8.0.30703</ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{D3D87C05-2811-489B-9F0D-7676B6485AA0}</ProjectGuid>
    <OutputType>Exe</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>MVST.Batch.CorrespondenceConversion</RootNamespace>
    <AssemblyName>MVST.Batch.CorrespondenceConversion</AssemblyName>
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>

我有超过100个其他的项目,它们都是以完全相同的方式设置的,并且这些项目可以成功构建。


生产环境上是否安装了 .Net 4.0? - TheKingDave
是的,我在C:\Windows\Microsoft.NET\Framework文件夹以及Framework64文件夹中都显示v4.0.30319。 - ganders
你的混合模式程序集需要哪个版本的平台工具集?并且这个版本是否存在于生产服务器上? - allen
1
你是在说它在生产机器上无法构建或运行吗?你的配置显示使用的是 .Net 3.5 版本。 - TheKingDave
不确定当我回复自己的答案时是否会通知其他人,所以我在这里发帖。在我实施下面的修复以针对CLR版本2.0时,它将构建该项目。但是当我尝试运行该项目时,它会失败。我必须完全注释掉那个部分才能使作业运行。我该如何在这里达成妥协?既要构建又要运行? - ganders
显示剩余2条评论
4个回答

17

http://support.microsoft.com/kb/2572158

在以下任一位置之一添加措辞useLegacyV2RuntimeActivationPolicy="true"

  1. sgen.exe.config文件位于以下位置:..\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\
  2. 应用程序的app.config文件

<startup useLegacyV2RuntimeActivationPolicy="true">

            <supportedRuntime version="v4.0" />

</startup>    


我在我的app.config中添加了上述属性,一切都运行得很好。 - pennyrave
2
我只想指出需要的部分是:useLegacyV2RuntimeActivationPolicy="true"。 - Taegost

2
如果您正在运行64位系统,您可能需要将其添加到Visual Studio测试引擎配置中:

C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TestWindow \ vstest.executionengine.exe.config

请添加以下启动节点:
<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <requiredRuntime version="v4.0.20506" />
</startup>

0
这是解决方案...仍然不确定为什么我的项目需要2.0,而其他人(在我问题的链接中)需要4.0。
  <startup>
    <supportedRuntime version="v2.0.50727"/>
  </startup>

现在我已经在我的代码中实现了上述内容以使其构建,但当我尝试运行作业时,它现在失败了。如果我注释掉整个部分,那么作业将可以正常运行。那么我该如何折中呢?我需要那个部分来构建项目,但我需要将其注释掉才能使程序运行... - ganders

0

在单元测试的情况下,如果您正在使用Resharper进行单元测试,则已经知道其他答案都不适用于您。

Resharper启动ResharperTestRunner(32位或64位)以执行您的单元测试。此文件位于(至少在我的系统中)C:\ Users [user] \ AppData \ Local \ JetBrains \ Installations \ ResharperPlatform [version]下。该文件的配置应位于相同位置,并且名称相同,但具有.config后缀。在我的系统中,它不存在。因此,我创建了它并添加了以下内容:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <!-- 4.0 RTM -->
    <supportedRuntime version="v4.0.30319"/>

    <!-- 2.0 RTM -->
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

然后,我的测试开始工作了。希望这能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接