Установщик Visual Studio - Изменить ресурс приложения - PullRequest
1 голос
/ 17 мая 2011

В основном у меня есть приложение с ресурсом для заголовка главного окна в моем файле Resources.resx.Я привязываю это к заголовку моего главного окна

Title={Binding Title, FallbackValue='My Generic Title'}

У меня есть 2 установщика (по одному для каждого из моих клиентов).Вот как я это делаю прямо сейчас:

  1. Установите заголовок, специфичный для клиента A.
  2. Скомпилируйте приложение.
  3. Создайте установочный файл для клиента A.
  4. Установите заголовок, специфичный для клиента B.
  5. Скомпилируйте приложение.
  6. Создайте установочный файл для клиента B.

Есть ли какие-либоспособ установить ресурс, чтобы быть конкретным для проекта установщика, который я использую?Затем после этого измените значение обратно на значение по умолчанию?

1 Ответ

2 голосов
/ 17 мая 2011

Я думаю, что вы можете сделать следующее:

1) Создайте две сборки с именами Resources.ClientA и Resources.ClientB. Они должны иметь точно такой же контент (те же классы в тех же пространствах имен), но этот контент должен быть специфичным для клиента для соответствующих клиентов. Например, я добавил следующий класс только для иллюстрации:

// assembly for ClientA : 
namespace Resources
{
    public class Class1
    {
        public static string Text { get { return "Client A text"; } }
    }
}

// assembly for ClientB : 
namespace Resources
{
    public class Class1
    {
        public static string Text { get { return "Client B text"; } }
    }
}

2) Откройте ваш основной файл проекта (csproj) и добавьте:

<PropertyGroup>
    <ClientToken>ClientA</ClientToken>
</PropertyGroup>

3) В том же файле ниже добавьте ссылку:

<ItemGroup>
    <ProjectReference Include="..\Resources.$(ClientToken)\Resources.$(ClientToken).csproj">
        <Name>Resources.$(ClientToken)</Name>
    </ProjectReference>
</ItemGroup>

Теперь, заменив свойство ClientToken, вы можете заменить клиентские сборки. Вы также сможете указать это свойство как часть процесса непрерывной интеграции, но, вероятно, вам нужно будет немного изменить свой файл csproj, чтобы он брал это свойство извне и только в том случае, если он не задан, установите некоторое значение по умолчанию. *

Также я не уверен в более простых способах выполнения вашей задачи, возможно, есть некоторые.

...