Благодаря этому я значительно снизил риск человеческой ошибки. Эти кнопки всегда должны быть вместе.

ли способ запретить публикацию отладочных сборок с ClickOnce?

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

Мы публикуем сборку из Visual Studio.

Ответы на вопрос(2)

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

<!-- The following makes sure we don’t try to publish a configuration that defines the DEBUG constant -->
<Target Name="BeforePublish">
    <Error Condition="'$(DebugSymbols)' == 'true'" Text="You attempted to publish a configuration that defines the DEBUG constant!" />
</Target>

Просто поместите его в конец файла, прямо перед</Project> тег.

(первоисточник:http://www.nathanpjones.com/wp/2010/05/preventing-clickonce-publishing-a-debug-configuration/comment-page-1/#comment-625)

 Peter Mortensen05 нояб. 2013 г., 15:28
Чтобы поле номера ошибки не было пустым в сообщении об ошибке от MSBuild ("... .vbproj (245,5): error: Вы попытались опубликовать ..."), используйте элемент "Код", например, "<Target Name =" BeforePublish "> <Error Condition =" '$ (Configuration)'! = 'Release' Or '$ (PlatformName)'! = 'AnyCPU' "Code =" 9999 "Text =" Вы попытались опубликовать конфигурация, которая не является Release и архитектурой AnyCPU! "/> </ Target>". В этом случае сообщение об ошибке будет «... .vbproj (245,5): ошибка 9999: вы попытались опубликовать ...»
 schlamar19 июл. 2013 г., 10:57
@ Даниэль-Дженнингс Это должен быть принятый ответ!
 Peter Mortensen05 нояб. 2013 г., 15:19
Чак: это работает, как ожидалось. Тем не менее, элемент «Ошибка» не определен в схеме для «цели»,msdn.microsoft.com/en-us/library/vstudio/t50z2hka.aspx, Был ли элемент "Ошибка" объявлен устаревшим? Тем не менее, это вmsdn.microsoft.com/en-us/library/8b08t3s4.aspx.
 chuck26 сент. 2013 г., 21:58
Это лучший ответ, и для его работы не требуется пакетный файл или какой-либо пакет NuGet. Я также настроил его так, что все публикации должны быть Release / AnyCPU, иначе произойдет сбой.<Target Name="BeforePublish"> <Error Condition="'$(Configuration)' != 'Release' Or '$(PlatformName)' != 'AnyCPU'" Text="You attempted to publish a configuration that is not Release and AnyCPU architecture!" /> </Target>
 j.i.h.13 мая 2013 г., 15:24
Мне нравится этот ответ, потому что а) он опирается на определяемый символ вместо используемой сборки и б) он не предполагает использование .bat для сборки
Решение Вопроса

которую вы можете сделать, это добавить условие в файл .csproj или .vbproj, которое MSBuild будет проверять при выполнении сборки.

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

Примером может быть что-то вроде этого:

<Choose>
    <When Condition=" '$(Configuration)'=='Debug' ">
        <Exec Command="C:\foo.bat" ContinueOnError="false" />
    </When>
 </Choose>

Где foo.bat - это пакетный файл, который возвращает ненулевое значение, тем самым предотвращая публикацию.

 Judah Gabriel Himango02 нояб. 2010 г., 16:41
Посмотрите на условные примеры MSBuild:msdn.microsoft.com/en-us/library/ms164307.aspx
 Michal Ciechan16 мар. 2010 г., 13:52
Не могли бы вы привести пример?
 schlamar19 июл. 2013 г., 11:02
Этот ответ намного лучше:stackoverflow.com/a/15080048/851737
 mklein26 окт. 2012 г., 23:47
Кто-нибудь когда-либо достигал этого и готов поделиться этим решением?
 Judah Gabriel Himango27 окт. 2012 г., 22:26
Просто добавил пример. Не проверял, но должен дать вам общее представление.

Ваш ответ на вопрос