Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additio

本文介绍了解决VS2010升级后出现的混合模式程序加载错误的方法。通过在配置文件中添加特定代码,使得程序能在.NET Framework 4.0环境下正常运行。

 

最近在升级到VS2010后,程序出现了如下这条错误:

Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.

 

经过网上查找,最后在CONFIG 中添加如下代码解决,这个文件为appname.exe.config:

 

 

<CONFIGURATION>

    <STARTUP useLegacyV2RuntimeActivationPolicy="true">

         <SUPPORTEDRUNTIME version="v4.0" />

         <REQUIREDRUNTIME version="v4.0.20506" />

    </STARTUP>

</CONFIGURATION>

  

原文地址:http://social.msdn.microsoft.com/Forums/en/clr/thread/58271e39-beca-49ac-90f9-e116fa3dd3c0

注意:VS2010 默认也会根据项目添加 STARTUP这个节点,但是仍然会报错。

需要手动添加如下代码,问题才得以解决:

useLegacyV2RuntimeActivationPolicy="true"

<REQUIREDRUNTIME version="v4.0.20506" />

<think>我们面对的问题是:Unity项目中,Assembly 'Packages/com.unity.collab-proxy/Lib/Editor/PlasticSCM/unityplastic.dll' 因为引用的System.Windows.Forms版本冲突无法加载。具体来说,该dll引用的是System.Windows.Forms 4.0.0.0版本,而项目中当前使用的是2.0.0.0版本。 根据错误信息,我们可以推断出以下关键点: 1. 冲突发生在PlasticSCM相关的dll和项目中引用的System.Windows.Forms版本不一致。 2. 引用[1]中出现了多个dll找不到的错误,这些dll都是PlasticSCM相关的。 3. 引用[2]和[3]提到了GUID冲突和多个同名dll的问题,这可能是由于同时安装了多个版本的PlasticSCM插件(如com.unity.collab-proxy和com.unity.plasticscm-cn)造成的。 4. 引用[4]提到了由于错误导致Assembly不被加载的问题。 因此,我们需要解决两个核心问题: A. 版本冲突:System.Windows.Forms的引用版本(4.0.0.0)与项目中的版本(2.0.0.0)不匹配。 B. 插件冲突:可能存在多个PlasticSCM插件(collab-proxy和plasticscm-cn)同时存在,导致dll冲突。 解决方案: ### 步骤1:移除冲突的PlasticSCM插件(推荐) 根据引用[2]和[3],Unity项目不应同时安装多个PlasticSCM插件。建议移除其中一个: 1. 打开Unity项目,进入`Window > Package Manager`。 2. 在Packages列表中找到`Unity Collaborate`(即collab-proxy)和`Plastic SCM`(plasticscm-cn)。 3. 选择其中一个卸载(通常保留一个官方推荐的版本,如Unity Collaborate是Unity内置的,而Plastic SCM是独立的插件)。 4. 重启Unity编辑器。 注意:卸载插件前请确保项目已备份。 ### 步骤2:解决System.Windows.Forms版本冲突 如果步骤1不能完全解决问题,或者项目确实需要同时使用这两个插件(但通常不推荐),则需要解决版本冲突: 方法1:升级项目中的System.Windows.Forms引用(不推荐,因为Unity项目通常不使用System.Windows.Forms,且升级可能带来其他问题) 方法2:强制绑定重定向(适用于.NET项目,但Unity使用的是Mono,可能不支持) 在项目的`app.config`文件中添加绑定重定向,但Unity编辑器环境可能不适用。 方法3:避免加载冲突的dll(推荐) 由于错误发生在Editor环境下,我们可以通过修改Unity项目设置来避免加载冲突的dll: 1. 定位到`Assets/`目录,创建或编辑`Assets/mcs.rsp`文件(用于传递编译器选项)。 2. 添加以下内容,以排除对冲突dll的引用: ```-nowarn:CS0006``` 这会将CS0006警告忽略(但不会解决根本问题,只是忽略错误)。 3. 或者,通过条件编译排除冲突代码(如果可行): 在引用冲突dll的代码处使用预处理指令,例如: ```csharp #if !UNITY_EDITOR_WIN // 引用冲突dll的代码 #endif ``` 但这种方法需要修改插件源码,不推荐。 方法4:更新PlasticSCM插件到最新版本 最新版本的PlasticSCM插件可能已经解决了这个版本冲突问题。请尝试更新: 1. 在Package Manager中更新PlasticSCM插件。 2. 如果更新后问题依旧,考虑卸载后重新安装。 ### 步骤3:清理并重新生成项目 1. 退出Unity。 2. 删除项目目录下的`Library`文件夹(Unity重新导入时会重新生成)。 3. 重新启动Unity,等待导入完成。 ### 步骤4:验证解决方案 重新打开项目,检查错误是否消失。如果错误仍然存在,可能需要联系插件提供商(PlasticSCM)获取支持。 注意:根据引用[4]中的信息,错误可能是由于dll本身的问题(损坏或不兼容)导致。因此,清理重新导入是关键。 总结:优先尝试卸载多余的PlasticSCM插件并清理项目,其次考虑更新插件或忽略警告。 §§相关问题§§ 1.如何在Unity中管理多个版本控制插件? 2.如何解决Unity中dll版本冲突问题? 3.如何正确清理Unity项目缓存以解决编译错误? </think>### Unity中解决PlasticSCM插件Assembly加载失败的问题 #### 问题原因分析 1. **强命名版本冲突** `unityplastic.dll`要求强命名的 **System.Windows.Forms v4.0.0.0**,但项目使用的是 **v2.0.0.0**,导致.NET运行时拒绝加载[^1][^4]。 2. **插件冲突** 同时存在多个PlasticSCM版本(collab-proxy和plasticscm-cn),引发GUID和dll重复冲突[^2][^3]。 3. **包缓存污染** PackageCache目录中的残留文件导致编译器无法正确解析依赖关系[^1]。 #### 解决方案步骤 ##### 1️⃣ 清理冲突包 (首要步骤) ```powershell # 移除冲突包 rm -rf ./Library/PackageCache/com.unity.collab-proxy* rm -rf ./Library/PackageCache/com.unity.plasticscm-cn* rm -rf ./Packages/com.unity.collab-proxy rm -rf ./Packages/com.unity.plasticscm-cn # 清除编译缓存 rm -rf ./Library/ScriptAssemblies/Unity.PlasticSCM.Editor.* ``` ##### 2️⃣ 在`Packages/manifest.json`中统一版本 ```json { "dependencies": { // 只保留一个PlasticSCM实现 "com.unity.collab-proxy": "2.7.1", // 添加版本绑定重定向 "com.unity.nuget.newtonsoft-json": "3.2.1", "com.unity.nuget.system-windows-forms": "4.0.0" } } ``` ##### 3️⃣ 添加程序集绑定重定向 在`Assets/Unity.PlasticSCM.rsp`文件中配置: ```xml <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Windows.Forms" publicKeyToken="b77a5c561934e089" /> <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/> </dependentAssembly> </assemblyBinding> </runtime> </configuration> ``` ##### 4️⃣ 最终清理操作 1. 关闭Unity编辑器 2. 删除工程目录下的`Library`和`obj`文件夹 3. 重新打开项目并等待包自动导入 #### 验证方法 检查控制台是否出现加载成功日志: ```log Assembly 'Packages/com.unity.collab-proxy/Lib/Editor/PlasticSCM/unityplastic.dll' loaded Loaded assembly: System.Windows.Forms, Version=4.0.0.0 ``` > ⚠️ **重要提示**:如果使用PlasticSCM进行源代码管理,操作前需暂停服务: > ```csharp > PlasticPlugin.Disable(); // 在Package Manager Console执行 > ``` #### 替代方案(如仍失败) ```mermaid graph LR A[问题持续] --> B[删除整个Library目录] B --> C{是否解决?} C -->|否| D[新建空白项目] D --> E[仅迁移Assets] E --> F[重装PlasticSCM] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值