1

我在构建一个合并的 DLL 以在 Windows 8 机器上以 .net4.0 为目标时遇到一些问题。我可以在 VS2012 中成功构建单个 .net4.0 dll,所以我没有这个问题:

在 Windows 8 上以 VS 2012 中的 .NET 4.0 为目标

我遇到了以下讨论我的问题的优秀博客文章:

http://www.mattwrock.com/post/2012/02/29/What-you-should-know-about-running-ILMerge-on-Net-45-Beta-assemblies-targeting-Net-40.aspx

并且:

无法从程序集“mscorlib”加载类型“System.Runtime.CompilerServices.ExtensionAttribute”

这表明我在合并期间使用以下语法:

/targetplatform:"v4,C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"

不幸的是,在 Windows 8 中我没有这个目录。我可以想到以下可能的解决方案,但很想知道是否有人已经解决了这个问题。

  1. 手动将 .net 4.0 程序集从 Windows 7 机器复制到上述目录中。
  2. 找到 VS2012 使用的 .net 4.0 程序集并引用它们。
  3. ??
4

2 回答 2

1

我也在使用 Windows 8 和 VS 2012,但没有遇到过这个问题(当然,其他一些人也很好)。很简单,可能只是您安装了 v3.5 或 v4.5,这意味着您需要安装 v4.0 框架(如果您已经尝试过,请再次安装)。

我还发现你提供的文件夹路径并没有带我去我电脑上的任何地方,但是这条路径可以;

C:\Program Files\Reference Assemblies\Microsoft\Framework\

你能在你的电脑上试试那个路径,看看那里是否有 v4.0 文件夹。

于 2013-05-18T11:53:09.577 回答
1

非常感谢您的评论和反馈。一个可行的(hacky)解决方案是执行以下操作:

  1. 在 Windows 8 上创建一个新目录,C:\Program Files\Reference Assemblies\Microsoft\Framework\v4.0.
  2. 转到没有安装 .net4.5 的 windows 7 机器,并复制文件夹的内容C:\Windows\Microsoft.NET\Framework\v4.0.30319
  3. 将步骤 2 中的文件粘贴到步骤 1 中创建的文件夹中。

然后,我能够使用以下方法正确引用 Windows 8 中的 .net4.0 程序集:

/targetplatform:"v4,C:\Program Files\Reference Assemblies\Microsoft\Framework\v4.0"

经测试工作正常。

于 2013-05-18T12:33:12.543 回答