Як запобігти копіюванню файлів документації XML у збірці режиму випуску?


86

У мене є проект Visual Studio 2010, який посилається на деякі сторонні компоненти. Їхні збірки супроводжуються файлами документації XML, корисними для нас (і лише для нас) розробників. І щоразу, коли проект будується (у режимах налагодження або випуску), ці файли XML копіюються в каталог побудови.

Здається, я не можу знайти налаштування або перемикач, щоб вимкнути копію цих XML-файлів до каталогу збірки, ні в Visual Studio, ні в MSBuild. Сценарій після збірки може бути варіантом, але смердючим. Будь-які ідеї? Дякую.


1
Щоб бути зрозумілим, ви додали посилання на збірку в діалоговому вікні додавання посилань. Тепер, коли ви створюєте doc, XML-файли відображаються у вашому вихідному шляху?
Sayed Ibrahim Hashimi

Відповіді:


116

Коли ви створюєте проект, файли .xml / .pdb збираються через завдання ResolveAssemblyReference. Коли ResolveAssemblyReference викликається, йому передається список розширень файлів для пов'язаних файлів. Цей список розширень файлів фіксується у властивості MSBuild AllowedReferenceRelatedFileExtensions . За замовчуванням цей список міститиме ".pdb; .xml".

Якщо ви хочете виключити всі пов'язані довідкові файли з підбору, просто перезапишіть значення властивості на те, для чого пов'язані файли не матимуть розширень. Наприклад, ви можете встановити для AllowedReferenceRelatedFileExtensions значення "-".

Ви також можете налаштувати список файлів, які повертаються цим. Якщо ви хочете знайти лише файли .pdb, вам потрібно буде перейти AllowedReferenceRelatedFileExtensions=".pdb". У цьому випадку всі посилання, які містять файл .pdb поруч із .dll / .exe, також будуть скопійовані. Ви також можете використовувати це для копіювання інших пов’язаних файлів, які не можуть закінчуватися на .pdb / .xml. Наприклад, якщо у вас є збірка з іменем MyAssembly.dll, і в цій самій папці є AllowedReferenceRelatedFileExtensions=".pdb;.foo"MyAssembly.pdb та MyAssembly.foo.


Це відповідь. Дуже дякую!
Гумберто,

16
Смішно, що знадобилося 2 роки, щоб отримати відповідь на це.
Sayed Ibrahim Hashimi

Я щойно зрозумів, що коментую це 2 роки тому, вибачте, що тоді не відповів :(
Саєд Ібрагім Хашимі

7
Специфіка про те , як вказати це в командному рядку MSBuild або в файлі проекту: stackoverflow.com/questions/2011434 / ...
yzorg

3
Де в Visual Studio ми можемо змінити AllowedReferenceRelatedFileExtensions?
Апострофікс

0

Файл проекту Visual Studio має той самий формат, що і будь-який файл msbuild. Таким чином, ви можете вручну додати умову до відповідного розділу, щоб не копіювати ваші xml-файли, якщо ім'я конфігурації - "Випуск".

Це повинно змінюватися

<ItemGroup>

до

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

або щось подібне.


3
Файл проекту та рішення Visual Studio - це файли MSBuild.
AMissico

@AMissico Неправильно, файли рішень не є файлами MSBuild.
julealgon

Хоча вони не перебувають у форматі файлу проекту (XML), вони як і раніше підтримують файл MSBuild. Встановіть змінну середовища ( set MSBuildEmitSolution=1або передайте аргумент властивості ( p:msbuildemitsolution=1).
AMissico

-4

Якщо .xml / .pdb позначено як дію збірки "Вміст" (тощо), ви можете змінити їх на "Немає". Ви також повинні переконатись, що копіювання для побудови-виводу є помилковим .

Чи обидва вони встановлені?


2
Але для цього мені потрібно було б додати їх як елементи проекту ... або я помиляюся?
Гумберто

Файли .PDB та .XML, створені за допомогою компілятора, ніколи не слід включати до проекту, оскільки у вас трапляються рекурсивні помилки збірки та блокування файлів.
Джеймі Ховарт,

1
@codegecko ти бачив "Немає"? вони повинні бути поруч із вихідною dll, щоб отримати intellisense тощо. Я ніколи не мав проблем з цим.
Марк Гравелл

2
@codegecko, хто щось сказав про смітник? Я б не посилався звідти ... Зазвичай я посилаюся на / lib, з dll, XML та pdb.
Марк Гравелл

1
Ааааах, зараз копійка випала, я неправильно зрозумів. Включивши їх у папку / lib, посилання всередині VS, додаючи елементи до папки рішення, вказавши тип виводу як "None" - отримав. Може почати використовувати це на власних проектах - дякую!
Jamie Howarth

-5

У чому проблема копіювання файлів XML у папку під час збірки випуску? Мені здається, що це нормально і що справжня проблема полягає в коді, який забирає файли, щоб розмістити їх у програмі встановлення. Вибір сторонніх dll-файлів із вашої власної папки bin \ release, на мій погляд, не є доброю практикою. Я б попросив мого інсталятора забрати сторонні DLL-файли з власної папки у моєму дереві джерел.


2
Проблема полягає в тому, що ці файли не мають жодної функції, крім допомоги функції IntelliSense. Немає сенсу включати їх до файлів випуску. До того ж тут не задіяний установник ...
Гумберто

То як ви розгортаєте свою програму?
Рассел МакКлюр,

3
Тож моїм рішенням було б змінити сценарій копіювання, щоб не копіювати файли, які ви не хочете копіювати.
Рассел Макклюр,

2
це спрацювало б точно. Але це не ідеальне рішення, яке може запобігти копіюванню файлів у збірці. Я намагаюся зрозуміти логіку цієї поведінки. Дякую!
Humberto

4
Хороші письмові файли документації XML великі. Копіювання їх під час кожної збірки скорочує термін служби мого твердотільного накопичувача.
springy76

-5

Параметр знаходиться у Властивостях відповідного проекту, на вкладці "Збірка" зніміть прапорець біля "Файл документації XML". Це також властивість MSBuild<DocumentationFile> відповідно до <PropertyGroup>конфігурації збірки у файлі. * Proj.


3
Ця відповідь неточна. Він запитує про попередньо сформовані файли XML, які надходять від постачальника елементів керування. Ваша відповідь корисна, лише якщо ви створюєте власні файли XML.
Кевін Калітовський 02.03.12

Здається, ви можете встановити це у файлі .csproj в елементі <PropertyGroup>: <AllowedReferenceRelatedFileExtensions> ".pdb". = "" </AllowedReferenceRelatedFileExtensions>
Jay,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.