12

我们最近升级到 VS2012 和 .NET 4.5。自从切换到 2012 年以来,我在调试时经常遇到这些错误:

编译器错误消息:BC32206:该项目当前包含对多个 NPGUtilities 版本的引用、对版本 2012.4.4751.24389 的直接引用和对版本 2012.4.4751.24391 的间接引用(通过“AdminWeb.targetweights.sgModels”)。将直接引用更改为使用 NPGUtilities 的 2012.4.4751.24391(或更高版本)版本。

BC32206:该项目当前包含对多个版本的 EnterpriseData 的引用,对版本 2012.4.4751.25227 的直接引用和对版本 2012.4.4751.25243 的间接引用(通过“SponsorWeb.selectplan.AdministratorXDataset1”)。将直接引用更改为使用 EnterpriseData 的版本 2012.4.4751.25243(或更高版本)。

这两个都是项目参考。我已经尝试删除和阅读它们,但仍然没有运气。任何人都可以就如何解决此问题提供任何建议吗?

4

16 回答 16

12

我能够通过删除文件bin夹中的所有文件然后重建项目来解决此问题。对我来说,问题是清理项目只是删除文件bin\Debug夹中的 DLL,而旧的 DLL 仍保留在bin\Release文件夹中。

于 2014-06-18T00:44:11.567 回答
1

首先是解决方法:我禁用了程序集版本自动增量!

注意到这个问题只出现在 Vs2013 中,有一个解决方案的副本完美运行 vs2010。vs2013 Build,rebuild,clean 解决方案,手动删除 ./bin 或 ./obj 或 %TEMP% 没有解决问题。我还在 Vs2013 中从头开始编写了一个新的解决方案,以避免来自 vs2010 的尸体:这个新解决方案只编译了两次:第三次错误再次出现,没有任何方法......机器中的某些东西很脏。

现在解释...

我在具有以下大纲的 86 项目的解决方案中遇到了同样的问题:“60.dll”是错​​误的 dll:

- 99.exe 
-- 80.dll
---- 70.dll
------- 60.dll
-- 81.dll
-- 82.dll
---- 60.dll

所以发生BC32206错误是有原因的。

The project '99.exe' currently contains references to more than one version of '60.dll, 
a direct reference to version 4.11.5618.23545 and an indirect reference (through '82.dll') to version 4.11.5618.23549. 
Change the direct reference to use version 4.11.5618.23549 (or higher) of '60.dll'

请注意,版本仅在从 23545 到 23549 的修订中有所不同(因此只有“4”单位):在某些重建中,此差异为“1”单位;记住这个数字是(自午夜/2 秒以来的秒数),我意识到出于某种原因,“60.dll”被编译了两次......无事可做:我没有找到任何不同的“60.dll”副本对应于较高值请求“23549”的日期时间。因此,确实存在 Vs2013 中的某些问题。

所以最后一次机会:我禁用了自动增量并将程序集版本固定到 XY0.0:这对于我的目的来说已经足够了,因为“60.dll”是综合版本的一部分,不应该单独部署(我仍然使用浏览正确文件的文件版本)

于 2015-05-20T16:13:29.790 回答
0

我们有一个类似的问题,清洁没有解决。结果发现项目中意外包含了一个 bin 文件夹,因此引用的 dll 被签入到版本控制中。撤消包含并从 repo 中删除 dll 就可以了。

于 2015-02-11T16:29:41.673 回答
0

我发现问题是因为我无意中设置了错误的启动文件夹。例如,我的 PROJECT_A 依赖于 PROJECT_B,而 PROJECT_A 应该是启动项目。但是,我没有意识到 PROJECT_B 现在是启动文件夹。

PROJECT_A 使用对 PROJECT_B dll 的旧引用进行编译,然后 PROJECT_B 随后创建新版本并将该新版本复制到 bin 文件夹。

更正启动文件夹为我纠正了这个问题。

于 2014-02-13T22:54:05.567 回答
0

我有同样的“明显”问题,花了我一整天的时间试图解决。我已经彻底检查了我的项目依赖项,并且都指向相同版本的有问题的 dll。我什至对我的本地文件夹进行了核对,并将所有内容从 Subversion 中取出 - 还是一样。我运行了 Process Explorer 并搜索了 dll,却发现 .NET Reflector 正在引用旧的 dll。几天前,我在不同的 Visual Studio 解决方案中调试旧版本之前使用了 .NET Reflector,而 .NET Relector 在其文件夹之一中引用了旧的 dll。这可能会节省一些时间。

于 2013-12-11T10:55:42.487 回答
0

如错误消息所示,您的库存在版本冲突。检查引用的版本以确保它们匹配,或者更好的是,确保您在主项目和子项目中使用对同一文件的引用。

于 2013-01-07T15:51:39.897 回答
0

我有一个使用 JSON.net v10 和现代版 ASP Identity 的项目。JSON.net 使用的是旧版本的 http.formatting dll - 通过 Nuget 升级到最新版本为我解决了这个问题。

于 2018-06-08T13:20:40.717 回答
0

我在远程调试时遇到了这个错误。被调试机器上引用的 dll 版本在功能上相同,但版本号与编译时引用的版本号不同。修复是替换正在调试的机器上的版本。

于 2016-09-02T14:59:24.353 回答
0

我的故事可能更像是一个边缘案例,但值得注意。

我正在开发一个允许开发 3rd 方插件的平台,使用他们提供的各种 SDK。

第 3 方插件被编译为 DLL 并上传到平台,并使用巫毒教和随机的家禽牺牲来加载它们(阅读:不确定它们是如何动态加载的)。

简单地说,我的问题是主程序和我的第 3 方 DLL 都引用了“fred.dll”。但我引用的是“fred.dll”的 1.1 版,而不是程序已加载的“fred.dll”的 1.0 版。在我的第 3 方组件中引用 1.0 版“fred.dll”解决了我的问题。

于 2020-06-30T19:02:01.793 回答
0

正如其他人所提到的,此错误可能是由于项目的 AssemblyInfo.file 中的自动增量功能引起的。

我们最初有 AssemblyVersion 之类的

<Assembly: AssemblyVersion("4.6.1")>

我改成

<Assembly: AssemblyVersion("4.6.1.*")>

那是错误。我开始有这个问题。我以为我只需要删除 .* 但它仍然不起作用,因为没有 .* 的程序集的版本号低于自动生成的版本号。

因此,为了修复,我在 web.config 文件的命名空间部分中引用了程序集。我删除了它并运行了项目,但出现了一些运行时错误。然后我添加了命名空间项,错误就消失了。

如果您的程序集位于 web/app.config 的命名空间部分,请试一试。

编辑:我的一位同事在做了这个技巧后仍然有这个问题。更好的解决方案是简单地清除临时 ASP .NET 文件夹。(C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET 文件)

于 2018-06-22T13:12:50.683 回答
0

我通过编辑 .DTSX 文件并将“Microsoft SQL Server\100\SDK\Assemblies”的所有实例替换为“Microsoft SQL Server\120\SDK\Assemblies”,为我的 SSIS 包中的所有脚本任务解决了这个问题。

我做了“替换”,然后在 VS 2013 中刷新,所有错误都消失了。

请注意,这些引用已经引用了版本 12,但“HintPath”仍然引用了“\100\”路径。我假设这是问题的根源。

以下是 .DTSX 文件前后的 XML 片段:

前:

<ItemGroup>
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=12.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SQLServer.ManagedDTS.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.ScriptTask, Version=12.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
  </ItemGroup>

后:

 <ItemGroup>
    <Reference Include="Microsoft.SqlServer.ManagedDTS, Version=12.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SQLServer.ManagedDTS.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Data" />
    <Reference Include="System.Windows.Forms" />
    <Reference Include="System.Xml" />
    <Reference Include="Microsoft.SqlServer.ScriptTask, Version=12.0.0.0, Culture=Neutral, PublicKeyToken=89845dcd8080cc91" />
  </ItemGroup>
于 2017-02-07T18:30:05.240 回答
0

我能够通过在“违规”项目的 AssemblyInfo.cs 文件中将 [assembly: AssemblyVersion("1.0.*")] 更改为 [assembly: AssemblyVersion("1.0.5814.0")] 来清除报告的冲突。

根据以下观察,这似乎是一个 IDE 问题:

  • 每次启动 Visual Studio 都会报告不同的版本;
  • 例如,在修订版 1.0.5814.18599 和 1.0.5814.18600 之间。
  • 而所有 bin 文件夹中的实际修订版本为 ...17929。

显然,VS 在启动时会检测并“缓存”冲突。清洁或重建没有帮助。

此外,似乎只有 C# 类库会带来这种行为。

于 2015-12-02T18:41:03.287 回答
0

我只是进入“NuGet”并卸载了与冲突库相关的所有包。然后我再次小心地重新安装,确保每个项目都具有相同的(最新)版本号。我正在使用“cEfSharp”模块,但错误地混合安装了版本 57 和 51。

于 2017-10-05T04:48:59.900 回答
0

我的问题与 Microsoft.SqlServer.SMO dll 集有关。我的决心再次与其他人完全不同。请注意,它适用于 Visual Studio 2017,v15.8.6。据我所知,这个问题有多种原因,我的解决方案不是清洁或装配自动编号。

在工作区 1 中构建的所有内容,但在工作区 2 中,由于以下原因,我遇到了上述问题: Microsoft.SqlServer.SMO 命名空间有大约 10 个左右的 dll 都设置为特定版本。正确找到了 8 个 dll,直接引用和版本特定。但是 2 有一个提示路径,但不是特定于版本的,也没有在提示路径中找到。因此,它将这两个默认设置为在较新版本的 GAC 中找到的。一旦我将丢失的两个 dll 复制到提示路径中,并将它们设置为特定于版本,一切正常。

为了确保,我确实手动编辑了项目文件以将每个引用设置为所需的旧版本,并且还在 app.config 中将程序集绑定重定向添加到旧版本以进行良好的测量。

于 2018-10-05T10:07:56.970 回答
-1

就我而言,清理和构建工作正常

于 2017-07-17T07:14:07.087 回答
-2

尝试删除所有 bin/debug/* 东西

于 2015-01-14T18:39:28.110 回答