2009-03-27 13 views
5

Tôi có một Tác vụ tùy chỉnh mà tôi muốn thực thi khi xây dựng các dự án C# của mình. Nhiệm vụ này nằm trong MyTask.dll, tham chiếu đến một assembly khác, MyCommon.DLL.Cách giải quyết: Tác vụ MSBuild tùy chỉnh yêu cầu lắp ráp bên ngoài AppBase

Vấn đề là MyCommon.dll nằm ở ".. \ Common \ MyCommon.dll" liên quan đến MyTask.dll, đặt nó bên ngoài thư mục AppBase cho quá trình MSBuild. Tôi đã xác nhận rằng đây thực sự là vấn đề bằng cách phân tích nhật ký của MSBuild và thấy báo cáo của Fusion về sự thất bại liên kết.

Tôi có thể làm gì để làm cho Fusion tìm thấy MyCommon.dll trong quá trình xây dựng? Lưu ý rằng việc di chuyển hội đồng sẽ phá vỡ ứng dụng của tôi, điều này cũng phụ thuộc vào nó.

CẬP NHẬT: Vâng, có vẻ như tôi sẽ sử dụng bản sao sau. Các giải pháp khác đều yêu cầu sửa đổi toàn bộ hệ thống, điều này không thực sự được bảo đảm ở đây.

Trả lời

2

Vậy hãy sao chép nó thay thế? Chỉ là một ý nghĩ. Có một bản sao ở đó chỉ để hỗ trợ bản dựng mà bạn xóa khi bạn đã hoàn thành nó.

+0

Vâng, tôi đang tiết kiệm để sử dụng như là phương sách cuối cùng. Nó cảm thấy clunky và tôi hy vọng có một cách tốt hơn. :) – aoven

+0

Đồng ý. Nhưng không có gì tôi có thể nghĩ buồn bã. Chúng ta sẽ thấy những gì còn lại của chúng. –

1

tôi thấy nhiều giải pháp:

1: Thêm lắp ráp trong GAC (lắp ráp của bạn phải có một tên mạnh)

gacutil /I <assembly name> 

2: Xác định vị trí lắp ráp thông qua Codebases or Probing, trong tệp machine.config của bạn hoặc trong msbuild.exe.config.

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="MyCommon" 
           publicKeyToken="32ab4ba45e0a69a1" 
           culture="neutral" /> 
      <codeBase version="2.0.0.0" 
         href="file://C:/yourpath/MyCommon.DLL"/> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

3rd: sao chép lắp ráp trong cùng thư mục trước và xóa nó sau đó, như David M nói.

-1

Tất cả các "giải pháp" này tạo ra nhiều phụ thuộc phức tạp hơn với môi trường. Nên có một cách dễ dàng hơn để cập nhật các con đường thăm dò trong thời gian chạy ..

Cụ MSBuild nên cho phép bạn thêm các đường dẫn thăm dò trong tập tin .proj của bạn, hoặc để xác định dlls phụ thuộc

Bạn có thể định nghĩa một UsingTask tùy chỉnh :

<UsingTask TaskName="Task" AssemblyFile="Assembly.dll" />

nhưng bạn không thể thêm phụ thuộc? nó nên được bao gồm ... ở đây với một cái gì đó giống như

<UsingTask TaskName="Task" AssemblyFile="Assembly.dll"> 
<DependantAssembly AssemblyFile="dependant.dll"/> 
</UsingTask> 

Nhưng, không có này không được hỗ trợ ...

0

Một lựa chọn là sử dụng ILMerge để hợp nhất phụ thuộc vào lắp ráp nhiệm vụ.