Как автоматически изменить какие файлы создаются в зависимости от конфигурации - Visual Studio - PullRequest
1 голос
/ 08 сентября 2011

У меня есть решение, созданное для нескольких клиентов, и мне нужно иметь возможность указывать разные xml-файлы для каждого клиента. Как я могу сделать это автоматически. Я думал, что это может быть сделано с различными конфигурациями, но не могу понять, как.

Есть предложения?

EDIT:

Этот код используется для объявления XML-файла прямо сейчас:

protected readonly static string XML_PATH = @"Resources/xml/Description.xml";

И решение этой проблемы теперь заключается в том, чтобы вручную скопировать правильный файл в файл Description.xml перед сборкой. Это, конечно, подвержено ошибкам, и я хотел бы автоматизировать его, преимущественно на основе конфигурации. Сейчас я ищу быстрое решение, поскольку, к сожалению, у нас нет времени на рефакторинг кода.

Ответы [ 3 ]

1 голос
/ 09 сентября 2011

Исходя из вашего переформулированного вопроса:

Вы можете использовать условную компиляцию (предостережение: это грязный и неправильный способ управления файлами конфигурации!):

protected readonly static string XML_PATH = 
#if DEBUG
@"Resources/xml/Description.xml";
#else
@"Resources/xml/Description2.xml";
#endif

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

1 голос
/ 08 сентября 2011

Сборка Конфигурационные файлы, зависящие от конфигурации, являются сложной задачей, и ее можно решить несколькими способами.

Если вы хотите пойти по пути, который вы наметили, вам нужно вручную отредактировать файл * .csproj и добавитьусловная ItemGroup для включения правильного XML-файла.Синтаксис ниже не был проверен, но что-то подобное должно делать

<ItemGroup Condition="'${Configuration}' == 'DEBUG'">
 <Content Include="blablabl.xml"/>
</ItemGroup>

. Я не помню, был ли Content правильной ItemGroup, но просто проверьте, в какой ItemGroup находятся ваши текущие .xmls, и используйте это..

0 голосов
/ 08 сентября 2011

Теперь, я сейчас не одобряю саморекламу, но в этом случае я надеюсь, что это нормально, так как это звучит актуально для вопроса, и я ничего от этого не получаю.

Недавно я написал пару постов в блоге о том, как настроить таргетинг на несколько сред / машин:

Ориентация на несколько сред и машин - часть 1/2

Ориентация на несколько сред и машин - часть 2/2

Насколько я понимаю, проблема в этом случае заключается в том, как автоматически создать правильный набор файлов без необходимости вручную определять, какие файлы принадлежат какому клиенту / среде. Решение, которое я предлагаю в постах блога, предполагает использование nAnt вместе с некоторыми расширениями, построенными поверх него. nAnt - это версия .NET Ant, инструмента для сборки, который позволяет вам создавать, например, XML-файлы с заданным набором входных файлов, позволяющие, например, создать специальный файл web.config для конкретного клиента.

В следующем разделе appSetting файла web.config, скажем, вы хотите указать другое значение для ключа CustomerName для каждого клиента:

<appSettings>
    <add key="CustomerName" value="${CustomerName}"/>
</appSettings>

Вместо указания значения для ключа CustomerName вы определяете свойство с именем CustomerName. Теперь, предполагая, что мы используем nAnt, вы создаете другой файл, специфичный для клиента, со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<target xmlns="http://nant.sf.net/release/0.86-beta1/nant.xsd">
  <property name="CustomerName" value="Acme Incorporated"/>    
</target>

nAnt может затем объединить эти два файла и автоматически создать файлы, специфичные для клиента / среды.

Решение, которое я рассмотрел, позволяет автоматически создавать файлы среды и компьютера, например, файл web.config, но также позволяет выводить статические файлы, например файлы лицензий или библиотеки, все в зависимости от среды / машины. Вы нацеливаетесь. Я также поставляю пример решения Visual Studio 2010, которое показывает очень простой пример того, как это сделать, и вы можете скачать здесь .

Вы можете, конечно, просто пойти дальше и взглянуть на nAnt , но я подумал, что предоставлю вам возможность использовать мое решение.

...