将程序集添加到SQL Server 2012时出错

时间:2014-12-19 04:33:38

标签: c# sql-server visual-studio-2012 sql-server-2012 .net-assembly

如果有人可以就我的问题提出建议,我会很感激。

我有一个EF版本为4.5的类库项目。

该项目的

App.Config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
  </configSections>
  <connectionStrings>
    <add name="Entities" connectionString="..." providerName="System.Data.EntityClient"/>
    <add name="REPORTSEntities" connectionString="..." providerName="System.Data.EntityClient"/>
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
  </entityFramework>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration>

当我尝试将dll添加到SQL Server 2012时,出现错误:

  

程序集'entityframework,version = 5.0.0.0,culture = neutral,publickeytoken = b77a5c561934e089。'在SQL目录中找不到。 (错误:6503)

我做错了什么?

非常感谢。

1 个答案:

答案 0 :(得分:4)

SQL Server的CLR主机受到设计的限制/限制。以下是受支持的.NET Framework库列表(找到here)。请注意,它是一个相当短的列表,并且实体框架不在其中。

  • CustomMarshalers
  • Microsoft.VisualBasic程序
  • Microsoft.VisualC
  • mscorlib程序
  • 系统
  • System.Configuration
  • System.Data
  • System.Data.OracleClient的
  • System.Data.SqlXml
  • System.Deployment
  • System.Security
  • System.Transactions的
  • System.Web.Services
  • 的System.Xml
  • System.Core.dll
  • System.Xml.Linq.dll

我无法想象为什么在数据库本身内部运行时需要加载数据访问框架。公平地说,如果您将它们全部加载为UNSAFE可以执行此操作,假设它们都是纯MSIL并且没有混合。但是,加载_un_supported .NET Framework库的几个风险之一是,如果它们随时间变化(通过Windows Update或手动更新),那么在SQL Server中运行的代码可能会停止工作。如果它只是一个更新版本,那么您需要手动更新必须加载到SQL Server中的相关.NET Framework DLL,以便首先使其工作。但是,如果其中一个DLL在更新中更改为混合,那么您将无法将更新的版本加载到SQL Server中,并且必须将代码更改为不再需要该DLL。

但是,如果你加载它,然后在引用EF DLL的完整路径时执行CREATE ASSEMBLY,它应该自动引入所有依赖项。

总而言之,您确定需要将任何DLL加载到SQL Server中吗?对于在SQLCLR中运行的任何内容,没有理由拥有app.config文件。