0

我有这个类,我试图从以下位置执行我的脚本:

using System;
using System.Data.SqlClient;
using System.IO;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using SSS.ServicesConfig.MiscClasses;

namespace SSS.ServicesConfig.sqlchanges
{
  internal static class ExecuteScript
  {
    public static Status Execute(SqlConnection con, string scripttoexecute)
    {
      var status = new Status();
      try
      {
        var file = new FileInfo(scripttoexecute);
        var script = file.OpenText().ReadToEnd();
        var server = new Server(new ServerConnection(con));
        server.ConnectionContext.ExecuteNonQuery(script);
        file.OpenText().Close();
        status.IsSuccess = true;
        status.Message = "Success!";
        return status;
      }
      catch (Exception ex)
      {
        status.Message = ex.Message;
        status.IsSuccess = false;
        return status;
      }
    }
  }
}

它正在执行一个由 SSMS 创建的 sql 脚本,我在项目中设置为每次都复制该脚本。

我收到这条消息:

混合模式程序集是针对运行时版本“v2.0.50727”构建的,如果没有额外的配置信息,则无法在 4.0 运行时中加载。

我检查了我的每一个项目,他们正在使用 .Net Framework 4。我在这一行收到这条消息:

server.ConnectionContext.ExecuteNonQuery(script);

是说我的 .sql 文件不是 .Net 4.0 文件吗?我不确定我是否理解这也指的是运行 2.0。

有任何想法吗?

编辑#1

如果有帮助,这是我的 .sql 文件的开头。我可以发布整个内容,但它是真正的基本内容,只需创建一些表格:

USE [master]
GO
/****** Object:  Database [SuburbanPps]    Script Date: 4/7/2014 2:00:12 PM ******/
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'SuburbanPps')
BEGIN
CREATE DATABASE [SuburbanPps] ON  PRIMARY 
( NAME = N'SuburbanPps', SIZE = 2048KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'SuburbanPps_log', SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
END

GO
ALTER DATABASE [SuburbanPps] SET COMPATIBILITY_LEVEL = 100
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [SuburbanPps].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [SuburbanPps] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [SuburbanPps] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [SuburbanPps] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [SuburbanPps] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [SuburbanPps] SET ARITHABORT OFF 
GO

编辑#2

我相信是Microsoft.SqlServer.ConnectionInfo因为它的版本是 v2.0.50727,它与上述版本匹配。

编辑#3

好的,我对此感到困惑。我会想到,当我添加时Microsoft.SqlServer.ConnectionInfo,我正在添加 .Net 4.0 版本,如下图所示:

在此处输入图像描述

这不正确吗?如果不需要,我宁愿在安装我的应用程序时不需要两个不同的框架。或者......我真的对发生的事情感到困惑吗?

这不只是一种解决方法,而不是解决问题的真正方法:

<startup useLegacyV2RuntimeActivationPolicy="true">
4

1 回答 1

2

混合模式组装?这是一个 ASP.Net 应用程序吗?

如果是这样,这已被多次回答和解决。对 Web.config 的一个小改动应该可以工作。

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0"/>
</startup>

参考

于 2014-04-07T19:56:51.617 回答