我可以使用 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 等。我可以做什么来获取/公开发布目标,就像上面的 LanguageTarget 为控制台、Web 和普通之外的其他遗留 C# 构建任务启用“CoreBuild”一样图书馆。
进一步的想法:
所以,进一步检查发现,实际上存在一个 Publish 目标。但它对名为 Publish 的子文件夹进行简单的文件夹/xcopy 部署,而不是创建 app.publish 文件夹并执行 ClickOnce 操作。
如何解决这个问题?
您可以使用 Mage.exe(命令行)或 MageUI.exe (gui) 工具手动发布 ClickOnce。这不是很方便,但如果一切都正确的话,它似乎确实有效。我将概述什么对我有用MageUI.exe
.
为您使用的 .NET 版本选择正确的实用程序版本:
C:\Program Files (x86)\Microsoft SDKs\Windows\
首先将您的应用程序文件发布到文件夹。通常这会是这样的:
\\服务器\共享\MyApplication\应用程序文件\MyApplication_1_0_0_25\
注意:我对以下空间有疑问Application Files
,它将被转换为%20
,但我认为 UNC 路径不支持该值。我必须删除空格并将文件夹重命名为ApplicationFiles
。 (但这可能会破坏以前发布的版本。)
然后使用MageUI.exe
创建新的应用程序清单:
- 在“名称”页面上,为其指定名称、版本,然后选择处理器架构 (x86)。
- 在“文件”页面上,输入将文件发布到的目录,然后单击“填充”。它应该将所有程序文件加载到下面的 DataGridView 中。
- 在“所需权限”页面上,我无法使其与 FullTrust 以外的任何内容一起工作。如果没有 FullTrust,当应用程序运行时,什么也不会发生。
- 将清单文件另存为
MyApplication.exe.manifest
到应用程序文件夹。 (保存清单后,您将能够对其进行签名。)
现在创建一个新的部署清单:
- 在“名称”页面上,输入相同的名称和版本,然后选择正确的处理器架构。
- 在描述页面上,输入发布者和产品。
- 在“部署选项”页面上,我选择“仅在线”。我没有包含开始位置。
- 在“应用程序参考”页面上,选择“选择清单”并浏览到您之前创建的应用程序清单文件。
- 将部署清单另存为
\\server\share\MyApplication\MyApplication.application
; (保存时可以签名。)
- 注意:这里的一个问题似乎是,当您选择应用程序清单文件时,它会推断出错误的相对路径。第一次保存部署清单后,再次选择应用程序清单文件,它现在将推断出正确的相对路径。然后再次点击保存就可以了。
有很多事情可能会出错,并且程序可能会在很多方面有所不同,但这些步骤对我有用。
(在这些步骤中我必须做的另一件事是通过删除以下内容来清除我的 ClickOnce 应用程序缓存c:\users\username\AppData\Local\Apps\2.0\
。但这可能只是因为我犯了所有错误。只有当你遇到困难时我才会这样做。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)