Доступ к папке внутри DLL C # - PullRequest
0 голосов
/ 03 июля 2019

Здравствуйте, у меня есть Dll с одной папкой внутри, и я хочу знать, как я могу получить доступ к этой папке из моего класса C # также в моей Dll.

Я пробовал с:

  AppDomain.CurrentDomain.BaseDirectory + @"/tesseract-master.1153";

но он получает только папку моего проекта, а не мою dll.

Я не знаю, правильно ли это, надеюсь, кто-то может мне помочь, спасибо.

РЕДАКТИРОВАТЬ: Мне нужна эта папка, чтобы моя DLL могла работать. Какой правильный способ «прикрепить» папку к моей DLL?

How can i access this folder

1 Ответ

1 голос
/ 03 июля 2019

У вас нет папок в DLL. Сборка .Net (DLL) содержит только :

  • Манифест сборки
  • Объявления типов (для использования другими библиотеками)
  • Код MSIL, который реализует эти типы (скомпилированный код, который фактически выполняется)
  • двоичный файл / строка ресурсы

То, что вы, вероятно, хотите использовать, это ресурсы, то есть встраивание файловиз вашей структуры проекта Visual Studio в выходную сборку.Они могут и будут организованы с использованием пространств имен, которые напоминают папки.Для этого вы можете выбрать BuildAction Embedded Resource в свойствах файла для отдельных файлов (выберите файл и R-Click> Свойства).К этим ресурсам можно получить доступ из кода , используя

Assembly.GetExecutingAssembly().GetManifestResourceStream("TessDll.tesseract-master.1153.your-file-here")`. 

Я не уверен насчет . в названии вашей папки, возможно, вам следует избегать этого.Если вы хотите встроить все содержимое папки в качестве ресурса, вам нужно отредактировать файл .csproj, как описано здесь .

Я рекомендую загрузить ILSpy - этоинструмент, с помощью которого вы можете открывать сборки .net и просматривать, что внутри.

В качестве альтернативы, имейте в виду, что вам не нужно встраивать свои ресурсы в свою сборку, чтобы они были доступны в выводе binпапка.Вы можете просто установить для свойства Copy to Output Directory значение true в свойствах файла, а затем получить доступ к файлу, используя исходный подход с AppDomain.CurrentDomain.BaseDirectory.Опять же, вам придется сделать это для каждого отдельного файла вручную, но вы также можете сделать это для всей папки, отредактировав файл .csproj с подстановочными знаками:

  <ItemGroup>
       <Content Include=".\tesseract-master.1153\**">
           <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
       </Content>
  </ItemGroup>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...