我试图运行这是目前我的机器上安装我在TeamCity的测试。
System.InvalidOperationException
:
实体框架提供程序类型“ System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer
, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
为“ System.Data.SqlClient
” ADO.NET提供者不能加载。 确保供应商组件是提供给运行的应用程序。
请参阅http://go.microsoft.com/fwlink/?LinkId=260882以获取更多信息..
我没有提及System.Data.Entity
在我的任何项目,正如在CodePlex上建议升级到EF6。
所以,我不知道为什么我会收到此异常。 当我运行从VS.测试我没有得到任何这样的例外
我曾尝试CopyLocal然后重新设置为false为true ..但似乎没有任何工作。
更新
我的app.config有以下。 这是否会导致一些行为我不明白?
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
</configuration>
我得到的TeamCity以下堆栈跟踪。
[MSTest] IntegrationTests.CrudTest+QuestionTest.Create
[03:59:11][IntegrationTests.CrudTest+QuestionTest.Create] Initialization method IntegrationTests.CrudTest+QuestionTest.Initialize threw exception. System.InvalidOperationException: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 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..
[03:59:11]
[IntegrationTests.CrudTest+QuestionTest.Create] at System.Data.Entity.Config.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName)
at System.Data.Entity.Config.ProviderServicesFactory.GetInstanceByConvention(String providerInvariantName)
at System.Data.Entity.Config.DefaultProviderServicesResolver.GetService(Type type, Object key)
at System.Data.Entity.Config.CachingDependencyResolver.<>c__DisplayClass1.<GetService>b__0(Tuple`2 k)
at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at System.Data.Entity.Config.CachingDependencyResolver.GetService(Type type, Object key)
at System.Data.Entity.Config.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r)
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
at System.Data.Entity.Config.ResolverChain.GetService(Type type, Object key)
at System.Data.Entity.Config.RootDependencyResolver.GetService(Type type, Object key)
at System.Data.Entity.Config.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r)
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
at System.Data.Entity.Config.ResolverChain.GetService(Type type, Object key)
at System.Data.Entity.Config.CompositeResolver`2.GetService(Type type, Object key)
at System.Data.Entity.Config.IDbDependencyResolverExtensions.GetService[T](IDbDependencyResolver resolver, Object key)
at System.Data.Entity.Config.InternalConfiguration.GetService[TService](Object key)
at System.Data.Entity.Config.DbConfiguration.GetService[TService](Object key)
at System.Data.Entity.Utilities.DbProviderFactoryExtensions.GetProviderServices(DbProviderFactory factory)
at System.Data.Entity.Infrastructure.DefaultManifestTokenService.GetProviderManifestToken(DbConnection connection)
at System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName)
at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity)
at System.Data.Entity.DbSet`1.Add(TEntity entity)
at EFRepository.Infrastructure.EFRepository`1.Add(T item) in c:\TeamCity\buildAgent\work\da2ea4e72c0e77f0\Repository\Infrastructure\EFRepository.cs:line 22
at IntegrationTests.CrudTest.Initialize() in c:\TeamCity\buildAgent\work\da2ea4e72c0e77f0\IntegrationTests\CrudTest.cs:line 34
Answer 1:
同样的问题,但我通过安装的NuGet EF 6。 EntityFramework.SqlServer失踪了另一个可执行文件。 我只是添加了NuGet包到该项目。
Answer 2:
我有同样的问题在我的测试项目 - 我通过的NuGet,每次安装了最新的EF6位。我祈求的东西EF相关的我:
对于“System.Data.SqlClient的” ADO.NET提供的实体框架提供型“System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer”无法加载。 确保供应商组件是提供给运行的应用程序。 请参阅http://go.microsoft.com/fwlink/?LinkId=260882以获取更多信息。
我的解决方法:我把我的测试项目中此方法:
public 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东西测试失败。
不管怎么说:工作我的机器上;)
注意: 不是添加到测试项目的方法,你可以确保从模型/实体项目的静态引用SqlProviderServices 。
Answer 3:
的NuGet将配置EF6项目中引用EntityFramework.SqlServer.dll。 这种部署,为构建过程中您EF6项目输出文件夹,但不会部署到为引用您的EF6工程项目的输出文件夹。 我相信这是因为Visual Studio是足够“智能”来检测你的组件没有被实际使用的DLL直接,因此不包含它。 您可以强制EntityFramework.SqlServer.dll通过添加代码到使用EntityFramework.SqlServer.dll您EF6项目部署到的引用您的EF6项目(单元测试,UI的等)项目的输出文件夹。 要小心,不要把代码中生成的类,你可能会失去它的下一个再生。 我选择了下面的类添加到组装,这解决了这一问题。
using System.Data.Entity.SqlServer;
internal static class MissingDllHack
{
// Must reference a type in EntityFramework.SqlServer.dll so that this dll will be
// included in the output folder of referencing projects without requiring a direct
// dependency on Entity Framework. See http://stackoverflow.com/a/22315164/1141360.
private static SqlProviderServices instance = SqlProviderServices.Instance;
}
Answer 4:
我的解决办法是通过的NuGet经理从项目中移除的实体框架,并添加回。
Answer 5:
我解决了这个由我的DbContext类的顶部添加使用stament,就像这样:
using SqlProviderServices= System.Data.Entity.SqlServer.SqlProviderServices;
Answer 6:
我已经使用基于代码的登记供应商。 链接1 链接2
刚创建的配置类似
class DbContextConfiguration : DbConfiguration
{
public DbContextConfiguration()
{
this.SetDatabaseInitializer(new DropCreateDatabaseAlways<MyDbContext>());
this.SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
}
}
关键的一点是this.SetProviderServices(SqlProviderServices.ProviderInvariantName,SqlProviderServices.Instance);
并用它在这样的方式
[DbConfigurationType(typeof(DbContextConfiguration))]
public class MyDbContext : DbContext
{
public MyDbContext()
{
...
}
public DbSet<...> ...{ get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
...
}
}
Answer 7:
我用[DeploymentItem]整理出来对我的组装类初始化
namespace MyTests
{
/// <summary>
/// Summary description for AssemblyTestInit
/// </summary>
[TestClass]
[DeploymentItem("EntityFramework.SqlServer.dll")]
public class AssemblyTestInit
{
public AssemblyTestInit()
{
}
private TestContext testContextInstance;
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
[AssemblyInitialize()]
public static void DbContextInitialize(TestContext testContext)
{
Database.SetInitializer<TestContext>(new TestContextInitializer());
}
}
}
Answer 8:
迟到了,但顶部投票的答案似乎都像黑客给我。
我所做的只是删除我的测试项目中的app.config以下。 工作。
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
Answer 9:
我有问题,因为我不给EntityFramework.sqlServer.dll添加引用。 当我开发的程序,它的工作原理。 但是,当我发布应用程序并安装它,它会引发错误。
我只是添加引用和生成并再次发布。
Answer 10:
我终于解决了这一点。 事实证明,我有一个错误的实现了IDisposable在我的仓库类。 我固定的。 因为我没有正确处理掉的资源错误执行造成了计算器例外。 这导致VS不运行测试和测试执行引擎坠毁。
我与微软提起在这里(这是之前我得到了正确的解决方案)。 connect.microsoft.com/VisualStudio/feedback/details/775868/vs-test-execution-crashes-in-vs-2012#details
无论如何,现在建立罚款的TeamCity运行。 虽然,我仍然好奇,为什么没有VS测试执行引擎必须告诉我发生了什么事没有团队市的优雅的方式。
我发现通过手动调试测试的根本原因(我只是经过这么多天实现,修复花了我5秒)。
希望这会帮助别人谁遇到这样的问题来了。
Answer 11:
我看到类似的问题,并利用这个职位的方法:( http://entityframework.codeplex.com/workitem/1590 ),解决了我的问题。
要解决这个问题,你可以让你的测试组件直接引用供应商装配通过添加一些线喜欢在测试组装此的任何地方:VAR _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
Answer 12:
我已经通过手动复制解决了这个EntityFramework.SqlServer.dll
文件到bin folder
的主要应用。
Answer 13:
当我考察这个问题,我注意到以下DLL是在输出文件夹丢失。 简单的解决办法是复制Entityframework.dll和Entityframework.sqlserver.dll与在app.config到如果应用程序是在调试模式下输出的文件夹。 同时变化,构建选项参数“复制到输出文件夹”的app.config的总是复制。 这将解决您的问题。
Answer 14:
简单地引用或浏览器的EF DLL - EntityFramework.SqlServer.dll
Answer 15:
我有同样的isssue我试过很多次,但它并没有解决,但是当我安装包EntityFramework.SqlServerCompact它解决了安装该软件包从NuGet包管理器。
Install-Package EntityFramework.SqlServerCompact
Answer 16:
我不想EF参考我的应用程序的项目(或手动复制任何东西),所以我说这我的EF项目的生成后事件:
cp $(TargetDir)EntityFramework.SqlServer.dll $(SolutionDir){your-main-bin-folder}
Answer 17:
这只是发生在我的负载/单元测试项目。 令人沮丧的,我jyst有它在我已经运行了2年的项目出现。 那一定是试运行的一些秩序,打破东西。 我想一旦网络连接被删除它走了。
我发现,简单地宣布用正确的值修复该问题的变量...我从来没有调用该方法。 只是定义它。 奇怪,但它的工作原理。
/// <summary> /// So that the test runner copies dlls not directly referenced by the integration project /// </summary> private void referenceLibs() { var useless = SqlProviderServices.Instance; }
Answer 18:
添加Entityframework.dll和Entityframework.sqlserver.dll的参考项目解决了这个问题。
Answer 19:
我在单元测试项目检查调试输出窗口。 EntityFramework.SqlServer.dll未加载。 将它添加到bin文件夹的测试后,成功运行。
Answer 20:
我也有过类似的问题
我的问题解决了通过执行以下操作:
Answer 21:
尝试所有其他建议的解决方案,并没有让我的项目的工作后,我终于找到了一点评论此页面 :
删除的Bin文件夹为我做
和它的工作对我来说太。
现在我不能告诉你,如果只需要删除bin文件夹,它会已经工作,或者,如果您首先做其他开发人员建议的事情,但问题是,我只得到它删除后工作bin文件夹,并在此之后3小时或更长时间寻找,并tryinig其他解决方案。 所以,也许这会为你工作了。
Answer 22:
我创建了一个静态的“启动”文件和添加的代码,迫使DLL被复制到其中的bin文件夹的方式来分隔这种“配置”。
[DbConfigurationType(typeof(DbContextConfiguration))] public static class Startup { }
public class DbContextConfiguration : DbConfiguration { public DbContextConfiguration() { // This is needed to force the EntityFramework.SqlServer DLL to be copied to the bin folder SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance); } }
Answer 23:
我只是有相同的错误消息。
我有我的数据访问一个单独的项目。 运行Web项目(其引用的数据项目)的工作在本地就好了。 但是,当我部署web项目天青大会:EntityFramework.SqlServer是不可复制的。 我刚刚添加的参考web项目和重新部署,现在它的工作原理。
希望这可以帮助别人
Answer 24:
我工作的Contoso大学离线教程,并试图创建一个使用EF我的第一个控制器时,遇到了同样的问题。 我不得不使用软件包管理器控制台从的NuGet高速缓存加载EF并创建了一个连接字符串到我的本地SQL Server实例,在这里我要说的是我的webConfig设置为EF可能不被设置为你们在那里,但我能通过完全内“的EntityFramework”中的“供应商”部分删除,以解决我的问题
罗伯特
Answer 25:
有一个简单的解决方法。 在项目中打开引用,右键点击“System.Data” - >属性。 更改“复制本地”到“真”。
问题应该是固定的。
Answer 26:
在我来说,我通过安装的时候我以前安装的SQL Server Express 2012(x64)的SQL Server 2012的开发版解决了这个问题。 这似乎与丢失的依赖提供了我。
Answer 27:
从项目通过的NuGet删除实体框架,然后将其添加回。
Answer 28:
在我的情况dll
是不可复制的,虽然我添加了一个参考吧。 这是因为EntityFramework.SqlServer.dll
不会被复制到您的项目。 添加该DLL,它有望work.You可以发现,从那里你添加数据模型的项目。
Answer 29:
其他在这里的所有有用的建议,如果你正在使用EF 6.1.3,得到确保您的项目的.NET版本在4.5以上。
Answer 30:
在我的情况的问题是,为了赶另一个例外,我已使公共语言运行库(CLR)异常。 我忘了禁用它。
我在例外设置禁用它。 它忽略了这个异常,并继续自动运行,并为我创建一个数据库(在我的情况)。
文章来源: Entity Framework Provider type could not be loaded?