禁止在ClickOnce部署中发布调试版本的构建

23

有没有办法禁止使用ClickOnce发布调试构建版本?

我只想允许发布发布版本,但现在偶尔会有人为错误导致调试版本被发布。

我们是在Visual Studio内部发布构建。

3个回答

60

我已经开始修改.csproj文件,加入以下代码以在调试部署时抛出错误,有效地阻止部署的发生:

<!-- 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


5
我很喜欢这个答案,因为它依赖于符号的定义而不是使用构建,并且不预设使用 .bat 来构建。 - j.i.h.
8
这是最好的答案,不需要批处理文件或某些NuGet包才能操作。我进一步调整了它,以便所有发布必须是Release / AnyCPU,否则将失败。 - charlie
Chuck:它按预期工作。但是,在“Target”的模式中未定义元素“Error”,http://msdn.microsoft.com/en-us/library/vstudio/t50z2hka.aspx。元素“Error”已被弃用吗?但是,它在http://msdn.microsoft.com/en-us/library/8b08t3s4.aspx中存在。 - Peter Mortensen
1
为了防止 MSBuild 的错误消息(“... .vbproj(245,5): error : You attempted to publish ...”)中的错误号字段为空,请使用元素“Code”,例如“<Target Name="BeforePublish"> <Error Condition="'$(Configuration)' != 'Release' Or '$(PlatformName)' != 'AnyCPU'" Code="9999" Text="You attempted to publish a configuration that is not Release and AnyCPU architecture!" /> </Target>"。然后错误消息将变为“... .vbproj(245,5): error 9999: You attempted to publish ...”。 - Peter Mortensen
我几个月前实现了这个解决方案,它刚刚救了我(我使用了Chuck的解决方案)。我回到这个答案只是为了确保我点了赞。我也真的有必要给某人一个高五。 - David Murdoch

9

您可以做的一件事是在 .csproj 或 .vbproj 文件中添加一个条件,MSBuild 在进行构建时会检查该条件。

该条件将检查是否正在进行发布,并检查构建是否为调试构建,然后执行诸如运行外部工具或以其他方式中断构建过程或导致其失败等操作。

例如,可能会像这样:

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

其中foo.bat是一个批处理文件,返回非零值,因此会停止发布过程。


1
你能提供一个例子吗? - Michal Ciechan
请查看MSBuild条件示例:http://msdn.microsoft.com/en-us/library/ms164307.aspx - Judah Gabriel Himango
有人曾经完成过这个任务并愿意分享解决方案吗? - mklein
刚刚添加了一个示例。尚未测试,但应该能够给您一个大致的想法。 - Judah Gabriel Himango

3
我选择了另一种解决方案,这对我很有效:

我无法更改我的构建过程。所以我做了 工具自定义... ,更改操作的文本,并添加一个警告,如“发布 [配置为发布!]”,并将发布按钮放在调试/发布配置选项旁边。非常容易!

这样可以大大降低人为错误的风险。这些按钮应该始终在一起。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接