Нежелательные изменения в файле .csproj при сборке

Я пытаюсь автоматически определить web.configs как часть события предварительной сборки преобразования в одном из моих файлов проекта веб-приложения, этот код поднимается на один уровень папки из моего файла проекта и получает все web.configs в каждом каталоге и подкаталог:

<ItemGroup>
    <WebConfigsRelativePath Include ="..\**\Web.config"/>
</ItemGroup>

Это прекрасно работает, но каждый раз, когда я собираю и выхожу из Visual Studio, я получаю приглашение с вопросом, хочу ли я сохранить изменения, внесенные в мой файл решения. Если я выберу «да» и открою файл проекта, приведенный выше код изменится на расположение каждого файла web.config.

<ItemGroup>
    <WebConfigsRelativePath Include="..\Web\Decade\Web.config" />
    <WebConfigsRelativePath Include="..\Web\Matrix\RiskAnalysis\Web.config" />
    <WebConfigsRelativePath Include="..\Web\Service\Web.config" />
    <WebConfigsRelativePath Include="..\Web\Web.config" />
</ItemGroup>

Это было бы хорошо, но вся причина, по которой я автоматически определяю предварительную сборку web.configs, заключается в том, что я могу добавлять и удалять web.configs по своему усмотрению без необходимости жестко кодировать их местоположения, и каждый раз, когда я выхожу из VS, местоположения будут жестко закодирован в файле проекта....

Кто-нибудь знает, почему эта ItemGroup меняется каждый раз, когда я выхожу из Visual Studio?


person ShaneC    schedule 07.02.2014    source источник
comment
на самом деле это тот же вопрос, что и stackoverflow.com/questions/21583437/   -  person stijn    schedule 07.02.2014


Ответы (2)


Если я возьму существующий веб-проект, но использую <Content />, а не пользовательский <WebConfigsRelativePath /> в вашем образце, то я увижу ожидаемое поведение.

Попробуйте использовать это:

<Content Include="..\**\Web.config">
  <SubType>Designer</SubType>
</Content>

Редактировать:

Если у вас есть специальная обработка для группы элементов WebConfigsRelativePath, опубликуйте ее в обновлении вашего вопроса.

person Nicodemeus    schedule 07.02.2014
comment
Спасибо за ваш ответ, но я не совсем уверен, как бы я получил ссылку на список файлов, если бы использовал ваше решение. - person ShaneC; 10.02.2014

Хотя я не могу объяснить, почему VS решает вывести список файлов, извлеченных с помощью подстановочного знака, каждый раз, когда мое решение создается, я могу показать вам, как я обошел эту проблему:

<PropertyGroup>
    <WebConfigsSearchString>..\**\Web.config</WebConfigsSearchString>
</PropertyGroup>

<ItemGroup>
    <WebConfigsRelativePath Include ="$(WebConfigsSearchString)"/>
</ItemGroup>

Путем определения строки поиска в свойстве (которое всегда остается статическим) и ссылки на свойство в списке файлов группы элементов для включения код группы элементов никогда не изменяется, но поиск web.config выполняется каждый раз при запуске сборки.

person ShaneC    schedule 10.02.2014