2012-05-23 34 views
6

Tôi đang cố gắng nhúng một dll không được quản lý trong dự án bảng điều khiển của mình. Không gian tên mặc định của dự án là Company.Project1Exe. Tên hội (đầu ra exe) được đặt tên theo project1.exeLàm thế nào để thay đổi không gian tên mặc định cho Tài nguyên đã nhúng bằng MSBuild?

các dlls được thêm vào dự án sử dụng tùy chọn Add as Link và được đặt tại một thư mục con Libs\x86

Company.Project1Exe 
    | 
    |--Program.cs 
    |--Libs 
     |--x86 
      |-My1st.dll 
      |-My2nd.dll 

Họ đã được thêm vào dự án sử dụng tùy chọn Add as Link , do đó không thể xác định vị trí trong thư mục con Libs.

Tôi đã đặt Hành động xây dựng của cả hai dll này thành 'Tài nguyên được nhúng'.

Theo mặc định, MSBuild sẽ nhúng các tệp này bằng cách sử dụng DefaultNamspace.ExtendedNamespace.FileName trong đó ExtendedNamespace đại diện cho cấu trúc thư mục của dự án.

Kết quả này trong tài nguyên được nhúng tương ứng là Company.Project1.Libs.x86.My1st.dllCompany.Project1.Libs.x86.My2nd.dll.

Tôi muốn các tài nguyên này được nhúng bằng cách sử dụng Tên hội để chúng được nhúng tương ứng là Project1.Libs.x86.My1st.dllProject1.Libs.x86.My2nd.dll.

Tôi làm cách nào để thực hiện việc này?

Trả lời

10

Một phương pháp có thể giải quyết vấn đề này là đặt LogicalName của tài nguyên được nhúng. Theo mặc định khi bạn nhúng một tài nguyên, bạn sẽ tìm thấy một mục trong tập tin csproj của bạn tương tự như

<EmbeddedResource Include="path to embdedded resource"/> 

Trong trường hợp các nguồn tài nguyên được bổ sung bằng Add as Link, bạn sẽ tìm thấy thêm Link thuộc tính. Trong trường hợp này, thuộc tính Link là đường dẫn của tài nguyên liên quan đến cấu trúc dự án của bạn và thuộc tính Include là trỏ đến vị trí của tệp trên máy của bạn (liên quan đến dự án của bạn).

<EmbeddedResource Include="path to embdedded resource"/> 
    <Link>Libs\x86\My1st.dll</Link> 
</EmbeddedResource> 

Để có được các hội đồng nhúng sử dụng một không gian tên khác nhau thuộc tính LogicalName có thể được thêm vào ở trên đó cho phép một để ghi đè lên các hành vi msbuild mặc định.

<EmbeddedResource Include="path to embdedded resource"/> 
    <Link>Libs\x86\My1st.dll</Link> 
    <LogicalName>$(TargetName).Libs.x86.My1st.dll</LogicalName> 
</EmbeddedResource> 

Mặt khác, có vẻ như bạn cần làm điều này cho mọi tài nguyên được thêm vào. Tuy nhiên, tôi đã ưu tiên rằng quy ước này được thiết lập theo cách nào đó để có thể là cách mặc định để nhúng bất kỳ tài nguyên nào vào dự án của tôi, sử dụng $(TargetName) làm thay thế cho vùng tên mặc định

+3

Bạn sẽ thấy rằng LogicalName nên có thể được cập nhật từ tab Thuộc tính khi chọn tệp nhưng không phải. Thay vào đó, người ta phải chỉnh sửa trực tiếp tệp dự án. –

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