使用 dotnet build 构建后“无法加载指定的元数据资源”

问题描述 投票:0回答:1

得出一些结论后,更具体的问题:

我有一个使用 Entity Framework v4 的 .NET 4.0 项目,它使用

.edmx
文件。我们将其称为实体框架访问的数据库的
EFProject
MyDB

此项目是包含项目的解决方案的一部分 - 其中一些是新的 SDK 项目文件。

EFProject
的项目文件中,我将
.edmx
Designer.cs
文件定义为
EmbeddedResources

<ItemGroup>
    <EmbeddedResource Include=MyDB.edmx" />
    <EmbeddedResource Include=MyDB.Designer.cs" />
</ItemGroup>

app.config
中,我添加到MyDB连接字符串,
.edmx
文件:

<add name="MyDBConnectionString" 
     connectionString="metadata=res=://*/MyDB.edmx|res://MyDB.csdl|...."

在 VS 或使用 CLI 命令构建解决方案时:

dotnet build

解决方案构建时没有错误。

当我“查看”

EFProject dll
(使用 dotPeek 反编译)时,我可以看到
.edmx
designer.cs
文件的资源。

但是:执行应用程序时(使用

dotnet build
构建后)并到达
EFProject
- 我收到错误 声称:

无法加载指定的元数据资源

我尝试过其他选项:也单独构建项目 - 但仍然 - 它不起作用。

有什么想法可以解决这个问题吗?

c# .net embedded-resource edmx dotnet-build
1个回答
0
投票

我的大部分答案都是从这个博客生成的,并涉及讨论线程

此错误的原因是实体框架连接字符串丢失或格式错误。特别是,导致此错误的原因是连接字符串的元数据参数。

所以在你的

connectionString=metadata=res=://*/MyDB.edmx|res://MyDB.csdl|....
中,基本格式是

  1. res://
    :从资源加载的 CSDL
  2. *
    :包含资源的程序集的名称。在您的情况下,您使用
    *
    省略名称,这很常见!
  3. MyDb.edmx
    :资源本身的名称

我确保您的第二个连接字符串资源

res://MyDb.csdl
在这种情况下正确调用程序集版本。

© www.soinside.com 2019 - 2024. All rights reserved.