私はスクリプトを実行しようとしているこのクラスを持っています:
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">