Вам нужен отдельный пакет ClickOnce для каждой среды. У каждого пакета должно быть другое имя_соединения. Просмотрите файл манифеста развертывания (* .application) для элемента assemblyIdentity. Атрибут name этого элемента должен быть разным для каждой среды. Это будет выглядеть примерно так:
<assemblyIdentity
name="Product_TEST"
version="2.5.44.19347"
publicKeyToken="82e7b44bd73eeecd"
language="neutral"
processorArchitecture="msil"
xmlns="urn:schemas-microsoft-com:asm.v1" />
Мы используем имена, как: Product_TEST, Product_UAT, Product_PROD различать каждый экземпляр ClickOnce. Используя этот метод, мы можем установить несколько экземпляров продукта рядом друг с другом на клиентском ПК.
Это означает, что вам необходимо создать отдельный пакет ClickOnce для каждой среды. Манифест развертывания будет различным для каждого, поэтому каждый пакет будет иметь разные подписи подписи (если вы используете подписанные пакеты). Мы использовали целевые объекты msbuild ClickOnce для создания отдельных пакетов для всех наших сред, но недавно изменили их на создание одного универсального пакета и создали настраиваемый инструмент настройки, который при необходимости выполняет переупаковку ClickOnce. Вы также можете использовать Маг.
Я не могу понять, как изменить атрибут имени. Я использую msbuild с/t: publish –
Если вы используете/t: Публикуете встроенную цель, вам нужно будет отредактировать это имя через Свойства проекта в VisualStudio. Откройте свойства проекта, откройте вкладку «Опубликовать» и нажмите «Параметры». Я использую цели GenerateApplicationManifest и GenerateDeploymentManifest msbuild непосредственно в сценариях сборки, поэтому я могу установить свойства по мере необходимости. – Glenn
Возможно, это изменилось, но я не вижу, как это сделать. Во всем моем тестировании все, что я смог выполнить, - это получить идентификационное имя, установленное из AssemblyName, но оно все равно производит неправильное значение. –