簡體   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