kot2566
@kot2566

Как правильно добавить ссылки при компиляции через csc.exe с#?

Использую Visual Studio 2017 Developer Command Prompt v15.0.26403.7

К примеру, есть своя библиотека классов по пути D:\Mylibrary\Mylibrary.dll

И вторая папка D:\testproject\, в ней три файла test.cs, test.rsp и Mylibrary.dll (без неё не работает)

Хочу скомпилировать файл test.cs из командной строки с использованием этой библиотеки;

Создал файл test.rsp
/lib:D:\Mylibrary\
/r:Mylibrary.dll

/target:exe 
*.cs


Файл test.cs:
using System;
using Mylibrary;

namespace test
{
    class Program
    {      
        static void Main(string[] args)
		{	
			StreamReader sr = new StreamReader("test.txt"); //Работает
			Mylibrary.TestClass tc = new Mylibrary.TestClass(); 
		}   
     }
}


Почему пришлось вручную скопировать файл Mylibrary.dll в папку с исходным кодом \testproject, если уже указана ссылка в файле test.rsp?

Если удалить её из этой папки, то выдаёт ошибку:
Необработанное исключение: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку "ClassLibrary_CGC, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" либо одну из их зависимостей. Не удается найти указанный файл.


Видимо, не совсем понимаю, как работает параметр /lib, так как думаю, что она говорит компилятору, что нужно искать dll в таком-то каталоге.
https://docs.microsoft.com/en-us/dotnet/csharp/lan...
  • Вопрос задан
  • 507 просмотров
Решения вопроса 2
@antkatcin
Мне кажется вы путаете компиляцию и выполнение. Судя по всему rsp файл вы создали правильно, смогли собрать проект, но при выполнении получили исключение FileNotFoundException.

Т.е. еще раз: компилятор все ссылки нашел и смог собрать проект. Ничего в параметрах csc.exe менять не надо.

У вас возникает другая проблема - во время работы программы .net пытается разрешить зависимость и не может найти этот файл. А .net всегда ищет сборку либо в GAC, либо в папке с программой. Изменить это поведение можно лишь двумя способами:
1. Создать config файл, в котором указать путь к папке, откуда загружать зависимости (через элемент codeBase)
2. В программе указать свой код для разрешения зависимостей. Т.е. указать обработчик, который будет загружать сборку самостоятельно. Подробности тут.

Ну и всегда можно сборку просто в GAC положить.
Ответ написан
Комментировать
DmitryITWorksMakarov
@DmitryITWorksMakarov
Просто тут положу: тыц
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы