Як запобігти копіюванню файлів документації 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.