C# 仅当我以发布模式发布时,EntityFramework.SqlServer.dll才不会添加到已发布文件夹中
我知道EF6 EntityFramework.SqlServer有问题,包括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 错误:
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,但它仍然无法编译。