2012-04-04 29 views
6

Tôi có một dự án thực thi, giả sử A, đang khởi chạy một dự án thực thi khác B trong khi chạy. Để có một B.exe trong thư mục làm việc hiện tại của A, tôi thêm B làm tham chiếu A để sau khi biên dịch, B.exe sẽ được sao chép vào thư mục của A. Tuy nhiên, tôi nhận thấy cấu hình mà tôi thực hiện cho B không được sao chép hoặc được tạo trong thư mục A (không có tệp B.exe.config trong thư mục A, chỉ B.exe) và do đó các công cụ như truy tìm B không phải là được định cấu hình chính xác.Làm cách nào để bao gồm thông tin App.config trong tệp thực thi tham chiếu trong .NET?

Tất nhiên tôi có thể sao chép thư mục B.exe.config theo cách thủ công sang A, nhưng tôi đặt cược có một số cách tự động để thực hiện điều đó. Ai có thể giúp tôi?

+0

A.exe khởi động B.exe như thế nào? Nếu bạn không sử dụng nó trong mã không làm cho một tài liệu tham khảo. Tạo một kịch bản xây dựng bài đăng (hoặc một cái gì đó) sao chép nó vào đúng thư mục. Nói chung chỉ có một tệp .config cho mỗi appdomain đó là lý do tại sao nó không được sao chép cấu hình của B nên ở trong A.exe.config khi nó được tham chiếu (đây không phải là một quá trình tự động). – albertjan

+0

@the_ajp Cảm ơn bạn đã trả lời. Tôi thực sự bắt đầu B.exe trong mã vì 2 lý do: 1) A.exe là một ứng dụng 64bits và B.exe là 32bits, vì vậy A.exe không thể tải B vào miền ứng dụng của nó. 2) Tôi muốn B.exe bị giết bất cứ khi nào A.exe tồn tại. Vì vậy, bạn có nghĩ rằng một kịch bản xây dựng bài viết sẽ là thực hành tốt nhất? – tete

Trả lời

-1

Bạn không thể có 2 app.configs trong thư mục ứng dụng của mình.
Visual studio sẽ sử dụng app.config của dự án khởi chạy theo mặc định.
Bạn có thể tạo trình kích hoạt sự kiện xây dựng bài đăng trong đó bạn sao chép app.config nhưng điều này sẽ thay thế app.config ban đầu (mà tôi đoán có chứa dữ liệu bạn cần).

Cách tiếp cận tốt nhất (ngoài việc tạo kiến ​​trúc dll + dự án sạch) là hợp nhất tất cả dữ liệu cấu hình của dự án A vào dữ liệu cấu hình của dự án B.

+0

Nó sẽ không ghi đè app.config vì app.config của b.exe sẽ được gọi là b.exe.config chứ không phải a.exe.config. Và về cơ bản bạn đã sao chép bình luận của tôi: (Tôi không đăng tải câu trả lời vì chúng tôi chưa biết cách sử dụng b.exe. – albertjan

+0

Không làm mới trang trước khi tôi gửi nhưng tôi có thể đảm bảo với bạn rằng tôi không Tôi đăng nó như là một câu trả lời bởi vì tôi cảm thấy rằng việc hợp nhất 2 app.configs sẽ khắc phục vấn đề của mình – Kristof

+0

Được rồi :) hehe. Nó sẽ và khi không phải là sự kiện xây dựng bài viết sẽ. – albertjan

5

Bạn có thể sử dụng sau khi xây dựng các sự kiện, hoặc ...

Trong dự án A, thêm một tài liệu tham khảo liên kết đến B.exe.config. Bạn làm điều này bằng cách thêm một mục hiện có vào dự án. Tuy nhiên, trước khi nhấn nút Thêm trên hộp thoại tệp, nhấn mũi tên xuống ở bên phải nút Thêm và chọn "Thêm làm liên kết". Sau đó, đặt tập tin để sao chép vào thư mục đầu ra. Trong tập tin dự án của bạn, nó sẽ giống như thế này:

Từ ProjectA.csproj:

<None Include="..\ProjectB\bin\Debug\B.exe.config"> 
    <Link>B.exe.config</Link> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
</None> 

Nếu bạn không nhớ bằng tay chỉnh sửa tập tin dự án của bạn, các tập tin bao gồm có thể phụ thuộc vào cấu hình xây dựng. Các công việc sau cho xây dựng (mặc dù VS2013 sẽ không mở file khi bạn nhấp đúp vào biểu tượng trong cây dự án.)

<None Include="..\ProjectB\bin\$(Configuration)\B.exe.config"> 
    <Link>B.exe.config</Link> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
</None> 
+0

Bạn có bất kỳ ý tưởng nào tại sao phương pháp này có thể không hoạt động trên Team Foundation Build Server – pquest

+0

@pquest Tôi không, nhưng tôi có một điểm dữ liệu khác cho bạn. Tôi vừa thử nghiệm nó bằng tài khoản VS 2015 và VisualStudio.com với TFS năm 2015. Nó hoạt động. Trong nhật ký tôi có thể thấy nó "sao chép tập tin từ ProjectB \ bin \ Release \ ProjectB.exe.config để ProjectA \ bin \ Release \ ProjectB.exe.config" và sau đó "sao chép từ ProjectA \ bin \ Release \ ProjectB.exe .config vào thư mục thả Tôi đã sử dụng biến $ (Cấu hình) trong liên kết của tôi đến tệp cấu hình. – Wally

5

Một giải pháp đơn giản hơn nhiều sẽ chỉ đơn giản là bao gồm trong file csproj. Điều này bao gồm các phần mở rộng tệp phù hợp cho các tệp được tham chiếu.

<PropertyGroup> 
    <AllowedReferenceRelatedFileExtensions> 
     .pdb; 
     .xml; 
     .exe.config; 
     .dll.config 
    </AllowedReferenceRelatedFileExtensions> 
    </PropertyGroup> 
+0

AllowedReferenceRelatedFileExtensions không được nhận dạng – Loaderon

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