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