我可以使用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事件。
如何解决这个问题?
答案 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
创建一个新的应用程序清单:
MyApplication.exe.manifest
到应用程序文件夹。 (保存清单后,您便可以对其进行签名。)现在创建一个新的部署清单:
\\server\share\MyApplication\MyApplication.application
; (您可以在保存时签名。)很多事情都会出错,并且程序可能会有很多不同的方式,但这是对我有用的步骤。
(在这些步骤中,我要做的另一件事是通过删除c:\users\username\AppData\Local\Apps\2.0\
的内容来清除我的ClickOnce应用程序缓存。但这可能仅仅是因为我犯了所有错误。我只会在以下情况下这样做:你被卡住了。)
答案 1 :(得分:0)
Microsoft最终将.NET 5中的ClickOnce功能添加到SDK样式Winforms和WPF项目中。