繁体   English   中英

C#获取引用程序集中的相对路径

[英]C# Get relative path in referenced assembly

我有2个项目Project A,Project B,project A具有对project B的引用,而Project A是可执行文件。

  Project A --> Project B 

在项目B中,有一个名为“ MyFolder”的目录

因此,soulotion层次结构如下:

    MySolution 
       -  A
       -  B 
          - MyFolder 

我如何从项目A(可执行文件)中获得MyFolder的相对路径。

我发现分配的答案如下:

  sring path = Assembly.GetAssembly(typeof(SomeClassInBProject)).Location;

我从中获得的路径是A的bin \\ debug中的B.dll路径,我该如何在该.dll中检索路径。

编辑:

iv'e也尝试过:

        Assembly assembly = Assembly.GetAssembly(typeof(SomeClassInBProject));
        FileStream fs = assembly.GetFile(@"MyFolder\myFile"); 

        and 

         FileStream fs = assembly.GetFile("MyFolder\myFile");  

        and 

         FileStream fs = assembly.GetFile("myFile");  

如果我总是空的。

您正在寻找Uri.MakeRelativeUri吗?

string pathA = Assembly.GetExecutingAssembly().Location;
string pathB = Assembly.GetAssembly(typeof(SomeClassInBProject)).Location;

Uri pathAUri = new Uri(pathA);
Uri pathBUri = new Uri(pathB);

string relativePath = pathAUri.MakeRelativeUri(pathBUri).OriginalString;
string relativeMyFolder = Path.Combine(relativePath, "MyFolder");

更新资料

您可以使用Assembly.GetFile()方法返回FileStream。 FileStream具有您可以在上面的代码中使用的Name属性。

除非出于某些原因您不能执行此操作,否则建议您打开“属性窗口” *,并将“ Build Action属性设置为Build Action Embedded Resource ,并确保将“ Copy to Output Directory设置为Do not copy 然后,您可以使用Assembly.GetFile()进行访问。

Assembly assembly = Assembly.GetAssembly(typeof(SomeClassInBProject));
using (FileStream fs = assembly.GetFile("myfile"))
{
    // Manipulate the FileStream here
}

*选择文件后,按Alt + Enter或右键单击文件并选择“ Properties

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM