Benutzer mit den meisten Antworten
Sql Script ausführen Mixed mode assembly

Frage
-
Hallo NG,
Probiere in einer WinApplikation ein Sql Script auszuführen, bekomme jedoch immer folgende Meldung:
Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.
Hier die Ausführung:
FileInfo fileLeistung = new FileInfo (AppGlobalPath .AppPathSqlScript + "Leistung_DropCreate.sql" );
string scriptLeistung = fileLeistung.OpenText().ReadToEnd();
SqlConnection cnSql = AppSqlClient .GetSqlConnection();
Server server = new Server (new ServerConnection (cnSql));
server.ConnectionContext.ExecuteNonQuery(scriptLeistung);Und hier das Script:
USE [KOF]
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF_LeistungGruppe_intErfassungUserID]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[LeistungGruppe] DROP CONSTRAINT [DF_LeistungGruppe_intErfassungUserID]
END
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF_LeistungGruppe_dtmErfassungDatum]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[LeistungGruppe] DROP CONSTRAINT [DF_LeistungGruppe_dtmErfassungDatum]
END
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF_LeistungGruppe_intMutationUserID]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[LeistungGruppe] DROP CONSTRAINT [DF_LeistungGruppe_intMutationUserID]
END
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF_LeistungGruppe_dtmMutationDatum]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[LeistungGruppe] DROP CONSTRAINT [DF_LeistungGruppe_dtmMutationDatum]
END
USE [KOF]
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[LeistungGruppe]') AND type in (N'U'))
DROP TABLE [dbo].[LeistungGruppe]
USE [KOF]
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[LeistungGruppe](
[intErfassungUserID] [int] NULL,
[dtmErfassungDatum] [datetime] NULL,
[intMutationUserID] [int] NULL,
[dtmMutationDatum] [datetime] NULL,
[intLeistungGruppeID] [int] IDENTITY(1,1) NOT NULL,
[strLeistungGruppe] [nvarchar](100) NOT NULL,
[strFibuKey] [nvarchar](20) NULL,
[intRekursivID] [int] NULL,
[intLevel] [int] NULL
) ON [PRIMARY]
ALTER TABLE [dbo].[LeistungGruppe] ADD CONSTRAINT [DF_LeistungGruppe_intErfassungUserID] DEFAULT ((0)) FOR [intErfassungUserID]
ALTER TABLE [dbo].[LeistungGruppe] ADD CONSTRAINT [DF_LeistungGruppe_dtmErfassungDatum] DEFAULT (getdate()) FOR [dtmErfassungDatum]
ALTER TABLE [dbo].[LeistungGruppe] ADD CONSTRAINT [DF_LeistungGruppe_intMutationUserID] DEFAULT ((0)) FOR [intMutationUserID]
ALTER TABLE [dbo].[LeistungGruppe] ADD CONSTRAINT [DF_LeistungGruppe_dtmMutationDatum] DEFAULT (getdate()) FOR [dtmMutationDatum]Target farmwork ist: .NET Framework 4.0
Vielen Dank
Robert Oberholzer
Antworten
-
Hallo Robert
du solltest alle deine Assembly-Verweise durchsehen, ob diese wirklich dem Stand zu .NET 4.0 entsprechen.
Falls 'SMO' verwendet, dann:
SMO's usage against .Net 4.0 hasnt been signed off or announced by microsoft
http://social.msdn.microsoft.com/Forums/en/sqlsmoanddmo/thread/533f7044-1109-4b7a-a697-2621f23017d6
http://social.msdn.microsoft.com/Forums/en/sqlsmoanddmo/thread/71a51d2b-0076-47dc-8a3e-710047f540f1wo sich auch der (zu mögl zu vermeidende!) 'Workaround' mit useLegacyV2RuntimeActivationPolicy beschrieben ist.
Andernfalls suche weitere:
http://www.google.com/search?q=site%3Asocial.msdn.microsoft.com+%2B%22Mixed+mode+assembly+is+built+against+version%22
- Als Antwort markiert Elmar BoyeEditor Dienstag, 23. November 2010 12:25
-
Hallo Robert,
das ist bekannt. Hier mögliche Lösungen:
ggf. die config anpassen:
wird auch hier vorgeschlagen:
[MSDN Magazine: The Working Programmer - Inside SQLite]
http://msdn.microsoft.com/en-us/magazine/ff898405.aspx<configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/> </startup> </configuration>
___________
oder nur neu erstellen:
[Mixed mode dll unable to load in .net 4.0]
http://social.msdn.microsoft.com/Forums/en/clr/thread/58271e39-beca-49ac-90f9-e116fa3dd3c0[Mixed mode assembly is built against version 'v2.0.50727' error using .NET 4 Development Web Server - Richard Fennell]
http://msmvps.com/blogs/rfennell/archive/2010/03/27/mixed-mode-assembly-is-built-against-version-v2-0-50727-error-using-net-4-development-web-server.aspx_______________
[Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information - Release Build]
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/2a5bf31e-df96-4bf1-a846-699da46b62fb[MSDN Magazine: The Working Programmer - Inside SQLite]
http://msdn.microsoft.com/en-us/magazine/ff898405.aspx[Übersicht über Hosting]
http://msdn.microsoft.com/de-de/library/dd380850.aspx
ciao Frank- Als Antwort markiert Elmar BoyeEditor Dienstag, 23. November 2010 12:25
Alle Antworten
-
Hallo Robert
du solltest alle deine Assembly-Verweise durchsehen, ob diese wirklich dem Stand zu .NET 4.0 entsprechen.
Falls 'SMO' verwendet, dann:
SMO's usage against .Net 4.0 hasnt been signed off or announced by microsoft
http://social.msdn.microsoft.com/Forums/en/sqlsmoanddmo/thread/533f7044-1109-4b7a-a697-2621f23017d6
http://social.msdn.microsoft.com/Forums/en/sqlsmoanddmo/thread/71a51d2b-0076-47dc-8a3e-710047f540f1wo sich auch der (zu mögl zu vermeidende!) 'Workaround' mit useLegacyV2RuntimeActivationPolicy beschrieben ist.
Andernfalls suche weitere:
http://www.google.com/search?q=site%3Asocial.msdn.microsoft.com+%2B%22Mixed+mode+assembly+is+built+against+version%22
- Als Antwort markiert Elmar BoyeEditor Dienstag, 23. November 2010 12:25
-
Hallo Robert,
das ist bekannt. Hier mögliche Lösungen:
ggf. die config anpassen:
wird auch hier vorgeschlagen:
[MSDN Magazine: The Working Programmer - Inside SQLite]
http://msdn.microsoft.com/en-us/magazine/ff898405.aspx<configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/> </startup> </configuration>
___________
oder nur neu erstellen:
[Mixed mode dll unable to load in .net 4.0]
http://social.msdn.microsoft.com/Forums/en/clr/thread/58271e39-beca-49ac-90f9-e116fa3dd3c0[Mixed mode assembly is built against version 'v2.0.50727' error using .NET 4 Development Web Server - Richard Fennell]
http://msmvps.com/blogs/rfennell/archive/2010/03/27/mixed-mode-assembly-is-built-against-version-v2-0-50727-error-using-net-4-development-web-server.aspx_______________
[Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information - Release Build]
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/2a5bf31e-df96-4bf1-a846-699da46b62fb[MSDN Magazine: The Working Programmer - Inside SQLite]
http://msdn.microsoft.com/en-us/magazine/ff898405.aspx[Übersicht über Hosting]
http://msdn.microsoft.com/de-de/library/dd380850.aspx
ciao Frank- Als Antwort markiert Elmar BoyeEditor Dienstag, 23. November 2010 12:25
-
Hallo Robert,
das Problem, das SMO auf .NET 2.0 basiert haben Thomas und Frank bereits erläutert.
Wenn Du SMO "nur" für das Ausführen von Skripten wie oben verwendest,
würde ich an Deiner Stelle auf SMO insgesamt verzichten.
Nicht nur das man sich den Kompatibilitätsmodus schenken kann, auch das Verteilen von SMO entfällt dadurch.
Denn ansonsten mußt Du SMO in den Setup mit aufnehmen, sofern es nicht bereits durch eine
SQL Server (Express) Installation oder aus dem Feature Pack auf dem jeweiligen Rechner installiert wurde.SQL Skripte wie sie z. B. das SSMS erzeugt, kannst Du direkt über eine SqlConnection via ExecuteNonQuery
ausführen. Dabei muß nur eine Trennung der Stapel (im Standard getrennt durch GO ) erfolgen.Gruß Elmar
P. S.: Ein DROP TABLE löscht auch alle CONSTRAINT Angaben einer Tabelle,
so dass Du obige DEFAULTs nicht separat löschen mußt. -
-
Hallo Robert,
zunächst zu GO :
Ein SQL Server Skript kann mehrere Befehlstapel (Batch ) enthalten, die durch GO getrennt werden.
Jeder Stapel muss bei ExecuteNonQuery einzeln ausgeführt werden.
Was daran liegt, dass einige Anweisungen nur als erstes in einem Stapel vorkommen dürfen
und jeder Stapel in seiner Gesamtheit übersetzt und ausgeführt wird.BACKUP und RESTORE sind auch "nur" SQL Befehle.
Solche Befehle kann man der "Vollständigkeit" halber einer Software hinzufügen.
Für eine permanente und regelmässige Sicherung sollte man einen Auftrag via SQL Server Agent
oder bei Express, wo es keinen Agenten gibt, über den Windows Task-Planer erstellen.
Denn sonst wird so etwas schon mal vergessen.Bei RESTORE ist zu beachten, dass dafür keine Verbindung zur Datenbank bestehen darf.
Und man den Zugriff auf die Funktion einschränken sollte, nicht das auf einmal irrtümlich
die Datenbank überschrieben wird.Gruß Elmar
-
Hallo Robert,
bevor der Thread jetzt ein DB-speziefisches neues Thema bekommt ... ist denn das mit Deiner Originalfrage (Mixed Mode Assembly) jetzt für Dich beantwortet? Hast Du jetzt die config angepasst, oder welche Lösung hast Du benutzt?
ciao Frank