Làm cách nào để ngăn chặn việc sao chép các tệp tài liệu XML trong bản dựng chế độ phát hành?


82

Tôi có một dự án Visual Studio 2010 tham chiếu đến một số thành phần của bên thứ ba. Các tập hợp của chúng được đi kèm với các tệp tài liệu XML, rất hữu ích cho các nhà phát triển chúng tôi (và chỉ chúng tôi). Và bất cứ khi nào dự án được xây dựng (ở chế độ Gỡ lỗi hoặc Phát hành), các tệp XML này sẽ được sao chép vào thư mục xây dựng.

Tôi dường như không thể tìm thấy cài đặt hoặc chuyển đổi để tắt bản sao của các tệp XML đó vào thư mục xây dựng, trong Visual Studio hoặc MSBuild. Một kịch bản sau xây dựng có thể là một lựa chọn, nhưng là một lựa chọn có mùi. Có ý kiến ​​gì không? Cảm ơn bạn.


1
Để rõ ràng hơn, bạn đã thêm một tham chiếu vào một hội đồng trong hộp thoại thêm tham chiếu. Bây giờ khi bạn xây dựng các tệp XML doc sẽ hiển thị trong đường dẫn đầu ra của bạn?
Sayed Ibrahim Hashimi

Câu trả lời:


112

Khi bạn xây dựng một dự án, các tệp .xml / .pdb được thu thập thông qua tác vụ ResolveAssemblyReference. Khi ResolveAssemblyReference được gọi, nó sẽ được chuyển qua một danh sách các phần mở rộng tệp cho các tệp liên quan. Danh sách các phần mở rộng tệp đó được ghi lại trong thuộc tính MSBuild AllowedReferenceRelatedFileExtensions . Theo mặc định, danh sách đó sẽ chứa ".pdb; .xml".

Nếu bạn muốn loại trừ tất cả các tệp tham chiếu có liên quan được chọn thì chỉ cần ghi đè giá trị của thuộc tính thành một thứ mà các tệp liên quan sẽ không có phần mở rộng. Ví dụ: bạn có thể đặt AllowedReferenceRelatedFileExtensions thành "-".

Bạn cũng có thể tùy chỉnh danh sách tệp được trả về bởi đó. Nếu bạn chỉ muốn tìm các tệp .pdb thì bạn cần phải đăng nhập AllowedReferenceRelatedFileExtensions=".pdb". Trong trường hợp đó, bất kỳ tham chiếu nào có tệp .pdb bên cạnh .dll / .exe chúng cũng sẽ được sao chép. Bạn cũng có thể sử dụng nó để sao chép các tệp liên quan khác có thể không kết thúc bằng .pdb / .xml. Ví dụ: nếu bạn có một assembly được tham chiếu có tên là MyAssembly.dll và trong cùng thư mục đó có MyAssembly.pdb và MyAssembly.foo Nếu bạn đặt AllowedReferenceRelatedFileExtensions=".pdb;.foo"thì cả tệp .pdb và .foo sẽ được sao chép vào thư mục đầu ra.


Đây là câu trả lời. Cảm ơn rât nhiều!
Humberto

15
Thật buồn cười khi mất 2 năm để có câu trả lời cho điều này.
Sayed Ibrahim Hashimi

Tôi chỉ nhận ra rằng tôi bình luận về vấn đề này 2 năm trước, xin lỗi vì không trả lời lại rồi :(
Sayed Ibrahim Hashimi

7
Chi tiết cụ thể về cách xác định này trên dòng lệnh msbuild hoặc trong một tập tin dự án: stackoverflow.com/questions/2011434/...
yzorg

3
Chúng ta có thể thay đổi ở đâu trong Visual Studio AllowedReferenceRelatedFileExtensions?
Apostrofix

0

Tệp dự án Visual studio có cùng định dạng với bất kỳ tệp msbuild nào. Vì vậy, bạn có thể thêm điều kiện vào phần tương ứng theo cách thủ công để không sao chép các tệp xml của bạn nếu tên cấu hình là 'Phát hành'.

Nó sẽ thay đổi

<ItemGroup>

đến

<ItemGroup Condition="'$(CONFIG)'=='RELEASE'">

hoặc thứ gì đó giống thế này.


3
Tệp giải pháp và dự án Visual Studio LÀ tệp MSBuild.
AMissico

@AMissico Sai, tệp giải pháp không phải là tệp MSBuild.
julealgon

Mặc dù chúng không ở định dạng tệp dự án (XML), chúng vẫn là tệp MSBuild hỗ trợ. Đặt biến môi trường ( set MSBuildEmitSolution=1hoặc chuyển đối số thuộc tính ( p:msbuildemitsolution=1).
AMissico

-4

Nếu .xml / .pdb được đánh dấu là "Nội dung" (v.v.) xây dựng hành động, bạn có thể thay đổi chúng thành "Không có". Bạn cũng nên đảm bảo rằng chúng sao chép-xây dựng-đầu ra là sai .

Cả hai đều được thiết lập?


2
Nhưng để làm điều này, tôi phải thêm chúng dưới dạng các hạng mục của dự án ... hay tôi nhầm lẫn?
Humberto

Các tệp .PDB và .XML được tạo từ trình biên dịch sẽ không bao giờ được đưa vào dự án vì bạn sẽ gặp phải lỗi xây dựng đệ quy và khóa tệp.
Jamie Howarth

1
@codegecko bạn có thấy "Không" không? chúng cần phải tiếp giáp với dll nguồn để có được intellisense, v.v. Tôi chưa bao giờ gặp vấn đề với điều này.
Marc Gravell

2
@codegecko ai nói gì về cái thùng? Tôi sẽ không tham chiếu từ đó ... Tôi thường tham chiếu từ a / lib, với dll, XML và pdb.
Marc Gravell

1
Aaaaah, bây giờ đồng xu đã giảm, tôi hiểu lầm. Đưa chúng vào thư mục a / lib, tham chiếu bên trong VS, thêm các mục vào thư mục giải pháp, chỉ định loại đầu ra là "Không có" - đã hiểu. Thực sự có thể bắt đầu sử dụng nó cho các dự án của riêng tôi - cảm ơn!
Jamie Howarth

-5

Vấn đề với việc sao chép các tệp XML vào thư mục trên các bản dựng phát hành là gì? Đối với tôi, có vẻ như điều này là tốt và vấn đề thực sự là với mã chọn tệp để đặt chúng vào trình cài đặt. Theo ý kiến ​​của tôi, chọn các dlls của bên thứ ba từ thư mục bin \ release của riêng bạn không phải là một phương pháp hay. Tôi đã yêu cầu trình cài đặt của mình chọn các dll của bên thứ ba từ thư mục riêng của họ trong cây nguồn của tôi.


2
Vấn đề là các tệp này không có chức năng nào ngoài việc hỗ trợ tính năng IntelliSense. Không có ích gì khi bao gồm chúng với các tệp phát hành. Bên cạnh đó, không có cài đặt liên quan đến ...
Humberto

Vậy bạn đang triển khai ứng dụng của mình như thế nào?
Russell McClure

3
Vì vậy, giải pháp của tôi sẽ là sửa đổi tập lệnh sao chép để không sao chép các tệp bạn không muốn sao chép.
Russell McClure,

2
điều đó chắc chắn sẽ hoạt động. Nhưng đó không phải là giải pháp lý tưởng , điều này sẽ ngăn không cho các tệp bị sao chép trong bản dựng. Tôi đang cố gắng hiểu logic đằng sau hành vi này. Cảm ơn!
Humberto 21/10/10

4
Các tệp tài liệu XML được viết tốt có dung lượng lớn. Sao chép chúng xung quanh trên mỗi bản dựng đang rút ngắn tuổi thọ của SSD của tôi.
springy76

-5

Cài đặt nằm trong Thuộc tính của dự án được đề cập, trong tab "Xây dựng", bỏ chọn "Tệp tài liệu XML". Nó cũng là một thuộc tính MSBuild được gọi <DocumentationFile>dưới dạng áp dụng <PropertyGroup>cho cấu hình bản dựng của bạn trong tệp. * Proj.


3
Phản hồi này không chính xác. Anh ấy đang hỏi về các tệp XML được tạo trước đến từ một nhà cung cấp điều khiển. Phản hồi của bạn chỉ hữu ích nếu bạn đang tạo các tệp XML của riêng mình.
Kevin Kalitowski

"Pdb".: Dường như bạn có thể thiết lập này trong file csproj trong <PropertyGroup> phần tử <AllowedReferenceRelatedFileExtensions> = "" </ AllowedReferenceRelatedFileExtensions>
Jay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.