【问题标题】:C# File Relative Path to a class类的 C# 文件相对路径
【发布时间】:2015-04-13 09:26:27
【问题描述】:

我有一个 C# 类文件,它将被打包为类库。在类库项目中,我有一个名为 XSL 的文件夹,在这个文件夹中我有一些 XSL 文件。执行 XSL 验证的 C# 类位于不同的命名空间中。如何从不同的命名空间中引用 XSL 文件夹,在该命名空间中,我有想要使用 XSL 文件进行 XSL 验证的类?

【问题讨论】:

  • 库通常不包含资源,使用您的库的执行应用程序将包含资源。但是,如果您真的需要它们,您可以嵌入它们。看看这个MSDN Article
  • 命名空间和文件系统文件夹是两个非常不相关的东西。一般来说,我想类库会将路径公开为依赖项(例如方法上的参数),以便使用应用程序可以提供它,和/或允许配置文件设置指定路径,并且可能默认为当前如果没有提供路径,则工作目录。
  • 我已经在我的类库中嵌入了 XSL 文件,但它们位于不同的文件夹中。我只想参考它们!
  • @user3102968:好吧——与Java相比——程序集不会将类文件存储在程序集中。所以没有相对路径这样的东西......
  • 文件夹无关紧要,特别是如果它被嵌入。您需要执行一些反射来获取资源流。我上面发布的文章有一些例子。

标签: c# class xslt namespaces


【解决方案1】:

如果文件嵌入在程序集中,您可以使用 Assembly.GetManifestResourceStream(String) 方法获取它们的内容 (Stream)。

所以:

Assembly a = Assembly.GetExecutingAssembly(); //get access to the current assembly.
Stream s = a.GetManifestResourceStream("xslt.file1");
//process stream s

如果它是第三方程序集(类库),您可以通过从该路径创建 Assembly 实例来加载它:

Assembly a = Assembly.LoadFrom("file.dll");

这当然只适用于具有可解释版本的 .NET 程序集。所以不要用它来加载由 C 编译器生成的.exe

每个资源都以点分隔的路径存储,例如"MyCompany.MyProduct.MyDirectory.MyFile.xslt"

【讨论】:

    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2011-06-15
    相关资源
    最近更新 更多