WPF Clickonce使用Microsoft.Net.Sdk发布

时间:2017-05-05 16:40:05

标签: c# .net msbuild clickonce csproj

我可以使用Sdk =“Microsoft.Net.Sdk”使用新的csproj格式成功构建WPF应用程序。

然而,发布该应用程序是一个挑战。该选项绝对不能从IDE中获得。但我觉得有点令人费解的是,当您直接调用msbuild时,Publish目标似乎不可用。

这些是我设置的一些顶级属性:

    <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
    <TargetFramework>net461</TargetFramework>
    <LanguageTargets>$(MSBuildExtensionsPath)\$(VisualStudioVersion)\Bin\Microsoft.CSharp.targets</LanguageTargets>
    <OutputType>WinExe</OutputType>
    <PlatformTarget>x86</PlatformTarget>
    <Prefer32Bit>false</Prefer32Bit>
    <!--<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>-->
</PropertyGroup></Project>

我还设置了与ClickOnce关联的典型例如PublishUrl等。我可以做什么来获得/公开Publish目标,就像上面的LanguageTarget为Console外的其他传统C#构建任务启用“CoreBuild”一样, Web和普通库。

进一步思考:

因此,事实证明,在进一步检查时,实际上存在一个发布目标。但它对名为Publish的子文件夹进行了简单的文件夹/ xcopy部署,而不是创建app.publish文件夹并执行ClickOnce事件。

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以使用Mage.exe(命令行)或MageUI.exe(gui)工具手动发布ClickOnce。它不是很方便,但是如果您一切正确,它似乎确实可以工作。我将概述使用MageUI.exe对我有用的东西。

从以下位置为您正在使用的.NET版本选择实用程序的正确版本:

  

C:\ Program Files(x86)\ Microsoft SDKs \ Windows \

首先将您的应用程序文件发布到一个文件夹中。通常情况如下:

  

\\ server \ share \ MyApplication \ Application Files \ MyApplication_1_0_0_25 \

注意:我对Application Files中的空格有疑问,该空格将转换为%20,但我认为UNC路径不支持该值。我必须删除空间并将文件夹重命名为ApplicationFiles。 (不过,这可能会破坏以前发布的版本。)

然后使用MageUI.exe创建一个新的应用程序清单:

  • 在“名称”页面上,为其指定名称,版本,然后选择处理器体系结构(x86)。
  • 在“文件”页面上,输入将文件发布到的目录,然后单击填充。它将所有程序文件加载到下面的DataGridView中。
  • 在“所需的权限”页面上,我无法使用FullTrust以外的任何功能。没有FullTrust,在运行应用程序时,什么也没发生。
  • 将清单文件另存为MyApplication.exe.manifest到应用程序文件夹。 (保存清单后,您便可以对其进行签名。)

现在创建一个新的部署清单:

  • 在“名称”页面上,输入相同的名称和版本,然后选择正确的处理器体系结构。
  • 在“描述”页面上,输入Publisher和Product。
  • 在“部署选项”页面上,我选择了“仅联机”。我没有添加“开始位置”。
  • 在“应用程序参考”页面上,选择“选择清单”,然后浏览到先前创建的应用程序清单文件。
  • 将部署清单保存为\\server\share\MyApplication\MyApplication.application; (您可以在保存时签名。)
  • 注意:这里的一个小问题似乎是当您选择应用程序清单文件时,它会推断出错误的相对路径。第一次保存部署清单后,再次选择应用清单文件,它将推断出正确的相对路径。然后再次点击保存,您就可以了。

很多事情都会出错,并且程序可能会有很多不同的方式,但这是对我有用的步骤。

(在这些步骤中,我要做的另一件事是通过删除c:\users\username\AppData\Local\Apps\2.0\的内容来清除我的ClickOnce应用程序缓存。但这可能仅仅是因为我犯了所有错误。我只会在以下情况下这样做:你被卡住了。)

答案 1 :(得分:0)

Microsoft最终将.NET 5中的ClickOnce功能添加到SDK样式Winforms和WPF项目中。