Выполнение скомпилированного файла cs с помощью команды csc завершается с ошибкой «Не удалось загрузить файл или сборку C#

Место общения программистов C#
Ответить
Anonymous
 Выполнение скомпилированного файла cs с помощью команды csc завершается с ошибкой «Не удалось загрузить файл или сборку

Сообщение Anonymous »

Мне нужно создать приложение WPF, которое добавляет задачу в планировщик задач. Поэтому я решил написать программу, которая компилирует файл cs и добавляет его exe в планировщик задач (я пробовал Microsoft.CodeAnalysis.CSharp.Scripting и Microsoft.CodeAnalysis.Scripting, но не знаю, как получить из них exe-файл). К сожалению, у меня с этим небольшая проблема. Компиляция файла cs завершается успешно, но запуск exe-файла завершается с ошибкой:

Код: Выделить всё

Could not load file or assembly System.Runtime or one of its dependencies
MainProgram.cs

Код: Выделить всё

Process process = new Process();
process.StartInfo.FileName = @"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\Roslyn\csc.exe"; //new compiler
process.StartInfo.Arguments = @"/out:""TestScript.exe"" /reference:""Microsoft.Data.SqlClient.dll"" /reference:""C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\System.Data.Common.dll"" /reference:""C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\System.ComponentModel.Primitives.dll"" /reference:""C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\System.Runtime.dll"" /reference:""C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\mscorlib.dll"" /reference:""C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\System.Console.dll"" ""TestScript.cs""";
process.Start();
process.WaitForExit();
string PathToCSFIle = @"TestScript.exe";
Process.Start(PathToCSFIle);
return 0;
TaskProgram.cs

Код: Выделить всё

using System;
using Microsoft.Data.SqlClient;
var ConnectionString = @"Data Source=MyDataSource;Database=MyDatabase;Integrated Security=True;Encrypt=True;Trust Server Certificate=True;MultipleActiveResultSets=true";
var SQLQuery = @"SELECT TOP(100) * FROM MyTable";
using (var connection = new SqlConnection(ConnectionString))
{
connection.Open();
using (var command = new SqlCommand(SQLQuery, connection))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
var ColumnData = reader["MyColumn"].ToString()!;
Console.WriteLine(ColumnData);
}
}
}
connection.Close();
}
Небольшая история составления строки. Вначале я добавил только одну ссылку на строку компиляции «Microsoft.Data.SqlClient». Но этого недостаточно и компиляция заканчивается такими ошибками

Код: Выделить всё

The type 'XXX' is defined in an assembly that is not referenced. You must add a reference to assembly 'abc123'
и

Код: Выделить всё

'T': type used in a using statement must be implicitly convertible to 'System.IDisposable'
Поэтому я добавлял отсутствующий abc123 снова и снова, пока компиляция не завершилась успешно.
Команда csc (в коде) для компиляции:

Код: Выделить всё

@"/out:""TestScript.exe"" /reference:""Microsoft.Data.SqlClient.dll"" /reference:""C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\System.Data.Common.dll"" /reference:""C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\System.ComponentModel.Primitives.dll"" /reference:""C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\System.Runtime.dll"" /reference:""C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\mscorlib.dll"" /reference:""C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\System.Console.dll"" ""TestScript.cs""";
команда csc (командная строка) для компиляции:

Код: Выделить всё

csc /out:"TestScript.exe" /reference:""Microsoft.Data.SqlClient.dll" /reference:"C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\System.Data.Common.dll" /reference:"C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\System.ComponentModel.Primitives.dll" /reference:"C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\System.Runtime.dll" /reference:"C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\mscorlib.dll" /reference:"C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\8.0.11\ref\net8.0\System.Console.dll" "TestScript.cs";
Любая помощь будет признательна.

Подробнее здесь: https://stackoverflow.com/questions/792 ... d-not-load
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»