【问题标题】:getting embedded files endiing with .txt from another assembly从另一个程序集中获取以 .txt 结尾的嵌入文件
【发布时间】:2015-01-20 06:30:24
【问题描述】:

在执行程序集中获取以 .txt 结尾的文件是没有问题的:

var files = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.txt").OrderBy(x => x).ToList();

但是,我想从另一个/未执行的程序集中获取上述以 txt 结尾的嵌入文件。这可能吗?

【问题讨论】:

  • 你可以只提供一个返回你感兴趣的字符串的库函数。
  • 如果我理解正确,您是否查看过 Assembly.GetAssembly 或如何加载程序集来做到这一点
  • 这不是重复的。引用的链接讨论了正在执行的程序集。
  • 我知道 Assembly.GetAssembly 但如何获取上述文件名?
  • @csetzkorn 将文本文件嵌入到程序集中相当于对字符串进行硬编码。

标签: c# .net


【解决方案1】:

以上不是抓取“嵌入”文件,而是抓取与正在运行的应用程序位于同一目录中的所有.txt 文件。

如果您对另一个Assembly 的目录感兴趣,您需要获取另一个Assembly。如果您参考了大会并知道大会内的公共 class(例如:SomeType),则可以这样做:

var path = typeof(SomeType).Assembly.Location;
var folder = new FileInfo(path).DirectoryName;
var files = Directory.GetFiles(folder, "*.txt").OrderBy(x => x).ToList();

根据程序集的不同,您的系统上可能还有一些数据,例如环境变量或 GAC 条目。

如果您没有引用程序集或知道该文件在系统中保留了特殊标志,则您必须有其他方法来获取它,这与只需将路径放在配置文件、数据库或类似资源中即可知道路径。

【讨论】:

  • 我知道这一点。那不是重点。我不知道该目录,因为它在另一个程序集中!
  • 如果它是另一个程序集的一部分,您的程序必须以某种方式引用它。我会更新我的答案
  • 是的,你可以使用 var assembly = typeof(BlaClass).Assembly;其中 BlaClass 来自包含文件的程序集......但不确定如何获取所有以 txt 结尾的文件!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
  • 2016-11-26
  • 2014-06-07
相关资源
最近更新 更多