Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅当我以发布模式发布时,EntityFramework.SqlServer.dll才不会添加到已发布文件夹中_C#_Entity Framework 6 - Fatal编程技术网

C# 仅当我以发布模式发布时,EntityFramework.SqlServer.dll才不会添加到已发布文件夹中

C# 仅当我以发布模式发布时,EntityFramework.SqlServer.dll才不会添加到已发布文件夹中,c#,entity-framework-6,C#,Entity Framework 6,我知道EF6 EntityFramework.SqlServer有问题,包括var type=typeof(System.Data.Entity.SqlServer.SqlProviderServices)在上下文构造函数中。当我在调试模式下发布时,它可以正常工作 仅当我在发布模式下发布时才获取以下错误。原因是发布的文件夹中缺少EntityFramework.SqlServer.dll。但是,bin文件夹在调试和发布模式下都具有EntityFramework.SqlServer.dll 错误:

我知道EF6 EntityFramework.SqlServer有问题,包括
var type=typeof(System.Data.Entity.SqlServer.SqlProviderServices)在上下文构造函数中。当我在调试模式下发布时,它可以正常工作

仅当我在发布模式下发布时才获取以下错误。原因是发布的文件夹中缺少
EntityFramework.SqlServer.dll
。但是,bin文件夹在调试和发布模式下都具有EntityFramework.SqlServer.dll

错误:

实体框架提供程序类型 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer已在应用程序配置文件中注册 对于具有固定名称“System.Data.SqlClient”的ADO.NET提供程序 无法加载。确保程序集限定名为 已使用,并且程序集对正在运行的应用程序可用


为什么只有在我使用发布模式发布时它才会丢失?

听起来您的解决方案中似乎有什么东西损坏了。我会重新制作解决方案并将所有文件复制到新的解决方案。

不知道为什么;但将此方法添加到上下文将使项目复制dll

private void FixEfProviderServicesProblem()
        {
            // The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'
            // for the 'System.Data.SqlClient' ADO.NET provider could not be loaded. 
            // Make sure the provider assembly is available to the running application. 
            // See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
            var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
        }
测试和工作
参考资料:

我也有同样的问题

发生的情况是,此
EntityFramework.SqlServer.dll
不是由项目直接引用的,而是由
EntityFramework.dll
在内部引用的

由于我们在代码中不使用任何
EntityFramework.SqlServer.dll
,因此Roslyn编译器应用了一些优化,了解到它不需要此组件,因此不会将其复制到
bin
文件夹,也不会为
Publish
进行复制

您需要做的是在代码中的任何地方创建对该
EntityFramework.SqlServer.dll
的某个对象的引用

例如,我有一个依赖项注入容器配置类,我在其中配置我的存储库和上下文,我认为这是一个很好的位置。所以我创建了一个静态属性,我从未在任何位置使用过,但它解决了问题:

使用System.Data.Entity.SqlServer;
公共类容器配置
{
//HACK:此代码段确保DLL(EntityFramework.SqlServer.DLL)
//未被编译器优化器(csc.exe roslyn)删除
公共静态SqlProviderServices EntitySqlServerHack=>SqlProviderServices.Instance;
公用空容器配置(IContainer容器)
{
内部配置(容器,false);
}
}

在解决方案资源管理器中,选择对EntityFramework.SqlServer.dll的引用,并确保在版本配置中将其标记为“复制到输出”,然后将其与调试进行比较。是否确实,调试和发布的数据库结构相同?@libik:是,两者的结构相同。此外,还验证了debug和release bin文件夹。它有EntityFramework.SqlServer.dll。@戴:你是说复制本地吗?因为我的EntityFramework.SqlServer.dll属性中没有“复制到输出”属性。请向程序集添加属性以引用EntityFramework.SqlServer。有关详细信息,请参见本作品。。很可能是因为此语句,entityframework.sqlserver“实际”使用了..已确认解决了此问题。需要哪些程序集引用此语句?我尝试添加System.Data和System.Data.Entity,但它仍然无法编译。