.net - 无法解析程序集 Model.dll

标签 .net entity-framework reflection

我有一个使用 Entity Framework 的类库项目,它运行良好,直到我将模型移到一个单独的类库类型项目中。

将模型移出到名为 Model 的单独类库项目后,我将 app/web.config 中的连接字符串更改为如下所示:

<add name="GlobalizationEntities" 
connectionString="metadata=res://Model.dll/Models.ResourceGlobalizationModel.csdl|
res://Model.dll/Models.ResourceGlobalizationModel.ssdl|
res://Model.dll/Models.ResourceGlobalizationModel.msl;
provider=System.Data.SqlClient;
provider connection string=&quot;
Data Source=MyComputer\sqlexpress;
Initial Catalog=DaDatabase;
Integrated Security=true;
MultipleActiveResultSets=True&quot;" 
providerName="System.Data.EntityClient" />

(我在上面的代码片段中包含换行符只是为了可读性。我的代码没有那些换行符。)

现在,我的解决方案结构如下所示:

enter image description here

但是,我得到了一个 FileNotFound运行时异常,内容为:

System.IO.FileNotFoundException was unhandled by user code
  HResult=-2147024894
  Message=Unable to resolve assembly 'Model.dll'.
  Source=System.Data.Entity
  StackTrace:
       at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.ResolveAssemblyName(String assemblyName, MetadataArtifactAssemblyResolver resolver)
       at System.Data.Metadata.Edm.MetadataArtifactLoaderCompositeResource.CreateResourceLoader(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)
       at System.Data.Metadata.Edm.MetadataArtifactLoader.Create(String path, ExtensionCheck extensionCheck, String validExtension, ICollection`1 uriRegistry, MetadataArtifactAssemblyResolver resolver)
       at System.Data.Metadata.Edm.MetadataCache.SplitPaths(String paths)
       at System.Data.Common.Utils.Memoizer`2.<>c__DisplayClass2.<Evaluate>b__0()
       at System.Data.Common.Utils.Memoizer`2.Result.GetValue()
       at System.Data.Common.Utils.Memoizer`2.Evaluate(TArg arg)
       at System.Data.EntityClient.EntityConnection.GetMetadataWorkspace(Boolean initializeAllCollections)
       at System.Data.Objects.ObjectContext.RetrieveMetadataWorkspaceFromConnection()
       at System.Data.Objects.ObjectContext..ctor(EntityConnection connection, Boolean isConnectionConstructor)
       at System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName)
       at Resources.BaseServices.Globalization.Models.ResourceGlobalizationEntities..ctor() in C:\SVN\Model\ResourceGlobalizationEntities.cs:line 7
       at Resources.BaseServices.Globalization.Models.Culture.IsValidCulture(String shortName) in C:\SVN\Model\Culture.cs:line 24
       at Resources.BaseServices.Globalization.EntityFrameworkStringResourceLoader.set_CultureName(String value) in C:\SVN\BusinessObjects\EntityFrameworkStringResourceLoader.cs:line 129
       at Resources.BaseServices.Globalization.EntityFrameworkStringResourceLoader..ctor(String cultureName, IDataSource dataSource) in C:\SVN\BusinessObjects\EntityFrameworkStringResourceLoader.cs:line 19
  InnerException: 

我用 2 个客户端尝试了这个场景,即一个控制台应用程序和一个 MVC 应用程序。

虽然控制台应用程序甚至不复制 BusinessObjects.dll及其引用的 dll,即 Model.dll到控制台应用程序的 bin目录,MVC 应用程序。然而,他们俩似乎都没有找到 Model.dll组装,并提出上述FileNotFoundException .

最佳答案

1) 更改 res://Model.dll/res://Model/ (没有“.dll”扩展名)在您的连接字符串中的所有位置。您还可以指定程序集的全名,例如:res://Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null/ (更多信息请访问:https://msdn.microsoft.com/en-us/library/cc716756.aspx)。

2) 接下来,确保以下命名空间有效:Model.Models.ResourceGlobalizationModel .如果不是,请相应地更改连接字符串和/或程序集名称。

关于.net - 无法解析程序集 Model.dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17769691/

相关文章:

c# - 如何检查我的程序是否以 admin/sudo C#/.NET Core 身份运行

c# - 标记代码的属性

c# - 为什么 PLinq 不支持超过 63 个并行线程?

c# - 插入一对多时出现 "Fixed size array"错误

java - 有没有一种方法可以在不反射的情况下从不同的运行时包访问 protected 类成员?

c# - 在每一页检查 session ?

c# - NotSupportedException 在 LINQ 和 EntityFramework 中使用 ToList()

c# - EF 4.1 生成字段 [Name]_Id 而不是 [Name]Id,FK 相关问题

java - 从 java.util.List<SomeType> 获取类

java - 安全地获取 java.lang.reflect.Method