参考装配的重新分配

时间:2016-06-21 08:28:03

标签: c# .net csharpcodeprovider assembly-loading

我们有一个使用CSharpCodeProvider动态生成和编译代码的应用程序。编译的代码使用Entityframework,因此我们将对Entityframework.dll的引用传递给编译器。我们使用我们的应用程序重新分发的Entityframework.dll是为.net 4.0构建的。我们还将对System.ComponenModel.DataAnnotations.dll的引用传递给编译器。这是对GAC中发现的dll的引用。

在.net 4.0上运行应用程序时,所有这一切都正常。但是,当在.net 4.5上运行时,我们遇到了一个问题,因为.net 4.0中的Entityframework中的某些属性已被移动到.net 4.5中的System.ComponenModel.DataAnnotations。所以我们得到这样的错误:

消息=错误(CS0246):类型或命名空间名称'列'找不到(你缺少using指令或程序集引用吗?) - file:c:\ Generated \ DataContext \ 0rs2sztj.2.cs:14 错误(CS0433):类型' System.ComponentModel.DataAnnotations.Schema.ColumnAttribute'存在于&c; \ Users \ Steven Segers \ AppData \ Local \ Temp \ Temporary ASP.NET Files \ vs \ 69fafaea \ 17b01629 \ assembly \ dl3 \ 95fc97d4 \ 5bdae37d_7c05d101 \ EntityFramework.DLL'和&#c; \ Windows \ Microsoft.NET \ assembly \ GAC_MSIL \ System.ComponentModel.DataAnnotations \ v4.0_4.0.0.0__31bf3856ad364e35 \ System.ComponentModel.DataAnnotations.dll' - file:c:\ Generated \ DataContext \ 0rs2sztj.2.cs:14

据我所知,有两种方法可以解决这个问题:

  1. 将.net 4.0的System.ComponenModel.DataAnnotations的引用程序集传递给编译器。这里的问题是该参考组件需要存在于目标机器上。为了适应这种情况,我们需要要求客户在其服务器上安装Windows SDK或者使用我们的应用程序分发参考程序集。我发现前者是一个相当不理想的要求,我不确定后者是否被允许。
  2. 确保我们将针对运行时.net版本的Entityframework.dll传递给编译器。我不确定实现这一目标的最佳方法是什么。

0 个答案:

没有答案