7

Tôi có dự án VS 2008 và csproj (Thư viện C#).Cách lấy vùng tên mặc định của dự án csproj (VS 2008)

Trong thuộc tính của dự án, có tên lắp ráp và không gian tên mặc định. Lưu ý: mỗi lớp có một không gian tên.

Có thể, trong thời gian chạy, nhận giá trị của không gian tên mặc định không ??

mục tiêu của tôi là nguồn lực sử dụng, và tôi cần giá trị không gian tên mặc định của:

Assembly assembly = Assembly.GetExecutingAssembly(); 

//foreach (string resourceName in assembly.GetManifestResourceNames()){} 

Stream syntaxModeStream = assembly.GetManifestResourceStream(pathToResources 
+ ".SyntaxModes.xml"); 

Cập nhật:

Pieter nói tôi không thể. Không gian tên mặc định không được lưu trữ trong assembly

var resource = assembly.GetManifestResourceNames().Single(p => p.EndsWith(".SyntaxModes.Xml")) 

không gian tên mặc định được lưu trữ ở đâu ??

Chỉ tôi có thể đọc bằng Addins Visual Studio (đối tượng DTE) ??

Trả lời

13

Bạn không thể.

Không gian tên mặc định không được lưu trữ ở bất kỳ đâu trong hội đồng. Nó chỉ là một thiết lập dự án của Visual Studio.

Điều tôi có xu hướng làm là sử dụng tên của hội đồng: Assembly.GetName().Name. Vấn đề với điều này là nó chỉ hoạt động nếu tên assembly không bị thay đổi.

Đối với vấn đề cụ thể của bạn, bạn có thể sử dụng assembly.GetManifestResourceNames() và làm một số xét nghiệm trên những cái tên đó, ví dụ:

string name = assembly.GetManifestResourceNames().Single(p => p.EndsWith(".SyntaxModes.Xml")) 
+0

không gian tên mặc định được lưu trữ ở đâu ?? Chỉ có thể đọc bằng cách sử dụng Addins Visual Studio (đối tượng DTE) ?? – Kiquenet

+0

Bạn luôn có tùy chọn tự đọc XML .csproj. Đó là nơi nó được lưu trữ. –

4

Không chắc chắn 100% đó là những gì bạn đang tìm kiếm nhưng bạn có thể nhận được namespace sử dụng:

this.GetType().Namespace 
+1

+1 - sử dụng phương pháp này vào ngày khác trong một lớp học .. –

+1

Điều này sẽ không hoạt động trong trường hợp (hiếm) khi không gian tên gốc trong dự án VS không giống như không gian tên của lớp bạn đang ở. có thể tự do đổi tên không gian tên gốc do đó phá vỡ mã. – Vlad

+1

Sẽ không hoạt động và trong những trường hợp không quá hiếm nhưng có thể khó chẩn đoán, dễ bị phá vỡ (không có gì để thực thi không gian tên lắp ráp mặc định giống như kiểu trong nó) – minsk

1

tôi đã viết một phương pháp khuyến nông cho hội mà chỉ tìm thấy tài nguyên theo tên tập tin của nó trong các nguồn lực bao gồm:

public static Stream GetManifestResourceStreamByFileName(this Assembly assembly, string fileName) 
{ 
    var targetName = assembly.GetManifestResourceNames() 
     .FirstOrDefault(x => x.EndsWith("." + fileName)); 

    return targetName == null ? null : assembly.GetManifestResourceStream(targetName); 

} 

thì bạn chỉ cần gọi như vậy:

var assembly = Assembly.GetExecutingAssembly(); // or Assembly.GetAssembly(this.GetType()) or whatever 

    var myResource = assembly.GetManifestResourceStreamByFileName("myResource.jpg"); 
+0

** không gian tên mặc định được lưu trữ ở đâu? * * – Kiquenet

+0

Tôi nghĩ rằng câu hỏi đã được trả lời ở trên: nó không được lưu trữ trong hội đồng. Khái niệm "không gian tên mặc định" là khái niệm Visual Studio được sử dụng tại thời gian biên dịch khi đặt tên tài nguyên được nhúng. Mã tôi đăng chỉ là những gì tôi cảm thấy là một giải pháp thanh lịch cho vấn đề không biết không gian tên mặc định. – esmoore68

Các vấn đề liên quan