我的计算机上有多个.NET程序集目录(我使用哪一个?)

时间:2011-04-08 22:45:17

标签: .net visual-studio .net-assembly

也许是转储问题(但我不是.NET的超级用户),但似乎我在我的机器上的两个不同位置有相同(或几乎如此)的.NET 4.0版本:

  1. C:\的Windows \ Microsoft.NET \框架\ v4.0.30319
  2. C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0

    • 在visual studio中,当我为C ++ / CLI项目添加引用时,它会将我带到目录#2。

    • 同样在visual studio中,我可以指定一个汇编路径来解析#using References(它允许我使用属性页中的符号路径)。在那里可以使用宏$(FrameworkDir)解析(至少在我的机器上)到C:\ Windows \ Microsoft.NET \ Framework \,它基本上是目录#1。

  3. 我应该使用哪一个?

3 个答案:

答案 0 :(得分:2)

首先,您应该使用“添加新参考”对话框 .NET选项卡。它由安装程序配置为显示正确的。

对于4.0,您应该始终使用2,它包含版本隔离的引用程序集。它们很特别,不仅仅是一个副本,而是精简到元数据。它们可以防止您意外使用Service Pack中添加的公共方法或属性。并在没有Service Pack的计算机上运行时中断程序。 WaitHandle.WaitOne(int)臭名昭着,仅在.NET 2.0 SP2中可用

答案 1 :(得分:1)

这是自.NET Framework 3.5以来的新概念。您可以在此blog post中详细了解相关内容。我假设你的平台是x64。因此,您在两台Program Files文件夹中的计算机上安装了.NET Framework for x86和x64。

答案 2 :(得分:1)

来自here

  

对于托管C ++项目,编译器将尝试导入引用程序集的依赖项,这是有道理的,但它无法识别已导入的程序集。然后,当使用原始引用将公共依赖项导入一次时,公共依赖项将与它们自身冲突,如果另一个引用将该公共项目作为依赖项再次引入,则会再次发生冲突。

     

因此,在此示例中,“Common”被导入“Forms”。然后将“Common”导入“Main”。但是,当“Main”导入“Forms”时,它会导入“Forms”的依赖项; “共同”,第二次。

     

修复是使用每个VC项目引用上的“在构建中使用依赖关系”和“在构建中使用”标志(通过VC属性表),并根据您的情况切换它们以解决此错误。