2012-03-19 27 views
6

Chúng tôi muốn cung cấp cho khách hàng của chúng tôi khả năng thực hiện các tùy chỉnh exes, dựa trên của chúng tôi, cho khách hàng của họ.Tạo bản sao của exe với tài nguyên khác nhau tại thời gian chạy

tức là về cơ bản khả năng tạo bản sao của tệp exe với tệp cấu hình xml khác được nhúng trong đó. Các "bao gồm nó trong cài đặt" không phải là một lựa chọn - chúng tôi muốn điều này để trông giống như nó đã được tùy chỉnh thực hiện cho khách hàng của khách hàng của chúng tôi.

Tôi hiện đang nghĩ đến việc viết một dll lúc chạy bao gồm tài nguyên (sử dụng AssemblyBuilder), sau đó gọi ILMerge để nhúng nó vào exe cuối cùng, nhưng điều này hơi khó hiểu hơn tôi muốn.

Vì vậy, đây là một yêu cầu cao, nhưng có lẽ đáng để hỏi: có thư viện .NET cho phép sửa đổi tài nguyên .NET exe có thể tránh toàn bộ "dll giữ tài nguyên được nhúng bởi ILMerge" bit không?

Hoặc cách khác, có cách tiếp cận nào tốt hơn để đạt được mục tiêu đã nêu không?

Trả lời

2

Âm thanh như rất nhiều công việc để thay thế nó khi nó đã được biên soạn. Tôi sẽ làm điều đó với một tập lệnh xây dựng, một tham số và các tệp tài nguyên khác nhau.

+0

có này không yêu cầu cho khách hàng toàn bộ mã nguồn của dự án? – Mania

+0

bạn không cần phải lấy tài nguyên nào bạn muốn thay thế và có tệp tài nguyên cho từng khách hàng. Lưu trữ tất cả tài nguyên của bạn trong một thư mục khác. ClientA ... ClientB và khi bạn đang xây dựng cho ClientA sao chép tệp tài nguyên xuống từ thư mục đó trước khi biên dịch –

+0

Không, điều này là dành cho các khách hàng của khách hàng của chúng tôi. Như trong một lần gỡ bỏ. Khách hàng của chúng tôi cần có thể tùy chỉnh chương trình cụ thể cho khách hàng của họ - biểu tượng khác nhau, các tùy chọn khác nhau, từ ngữ khác nhau. Điều này là tất cả có thể dễ dàng thực hiện thông qua một tài liệu xml, tiếc là tại thời điểm này tôi phải là một trong những để làm điều đó. Chúng tôi muốn khách hàng của chúng tôi có thể làm điều đó. Hơi phức tạp hơn. – Mania

0

Mặc dù đó không phải là cách tiếp cận tôi muốn thực hiện với sự cố này nhưng thư viện cho phép bạn thay đổi tài nguyên được nhúng của tệp thực thi đã biên dịch, Cecil.

Nhúng một tài nguyên với Cecil:

namespace vùi:

using Mono.Cecil; // supports both net and mono 

nhúng tài nguyên:

static void Main(string[] args) 
    { 
     string pathToExecutable = "Target.exe"; 

     byte[] encoding = Encoding.Unicode.GetBytes("<Data><!-- data goes here --></Data>"); 

     var resource = new EmbeddedResource(
       "ConfigurationFile", 
       ManifestResourceAttributes.Private, 
       encoding); 

     var asm = AssemblyDefinition.ReadAssembly(pathToExecutable); 

     asm.Modules.FirstOrDefault().Resources.Add(resource); 

     asm.Write(pathToExecutable); 
    } 
Các vấn đề liên quan