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

我有2个项目项目A,项目B,项目A有项目B的参考,项目A是可执行项目。

Project A --> Project B 

在项目B内部有一个名为“MyFolder”的目录

所以灵魂运动的层次结构如下:

  MySolution - A - B - MyFolder 

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

我找到了大量答案,其中说明了以下内容:

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

我从这里回来的路径是A的bin \ debug中B.dll的路径,我如何在该.dll中检索路径。

编辑:

我也尝试过:

  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"); 

fs我总是空的。

是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"); 

更新

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

除非有某些原因你不能这样做,否则我建议打开属性窗口*并将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