访问DLL C#中的文件夹

时间:2019-07-03 14:37:58

标签: c# dll

你好,我有一个带有一个文件夹的Dll,我想知道如何从我的Dll中的C#类访问该文件夹。

我尝试过:

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

但是它只会获取我的项目文件夹,而不会获取我的dll。

我不知道这是否对,希望有人能帮助我,谢谢。

编辑:我需要该文件夹,以便我的DLL可以工作。将文件夹“附加”到我的DLL的正确方法是什么?

How can i access this folder

1 个答案:

答案 0 :(得分:1)

您在DLL中没有文件夹。 A .Net assembly (DLL) only contains

  • 程序集清单
  • 类型声明(供其他库使用)
  • 实现这些类型的MSIL代码(实际运行的编译代码)
  • 二进制/字符串资源

您可能想使用的是资源,即将文件从Visual Studio项目结构嵌入到输出程序集中。可以并且将使用类似于文件夹的名称空间来组织它们。您可以在单个文件的文件属性中选择 BuildAction Embedded Resource(选择文件,然后单击R单击>属性)。这些资源可以使用

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

我不确定文件夹名称中的.,也许您需要避免这种情况。如果要将文件夹的所有内容嵌入为资源,则需要按照here所述编辑.csproj文件。

我建议下载 ILSpy -它是您可以打开.net程序集并查看其中内容的工具。

或者,请注意,您无需将资源嵌入到程序集中即可在bin输出文件夹中使用它们。您只需在文件属性中将复制到输出目录属性设置为true,然后使用您的原始方法AppDomain.CurrentDomain.BaseDirectory访问文件。同样,您必须手动对每个文件执行此操作,但是也可以通过使用通配符编辑.csproj文件来对整个文件夹执行此操作:

  <ItemGroup>
       <Content Include=".\tesseract-master.1153\**">
           <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
       </Content>
  </ItemGroup>