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バージョンを追加していると追加したとき、私は思ったでしょう:

ここに画像の説明を入力

それは正しくありませんか?必要がなければ、アプリケーションをインストールするときに 2 つの異なるフレームワークを要求する必要はありません。それとも...何が起こっているのか本当に混乱していますか?

これは、問題の実際の修正ではなく、単なる回避策ではありません:

<startup useLegacyV2RuntimeActivationPolicy="true">
4

1 に答える 1