发布版WPF .NET Core

12

我想使用类似下面的代码,但在.NET Core WPF C#应用程序中使用。这是我以前使用过的。

public static string GetVersion()
{
   if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
   {
      Version myVersion = ApplicationDeployment.CurrentDeployment.CurrentVersion;
      return $"Version {myVersion}";
   }
   return "Version not deployed";
}

.NET Core有类似的功能吗?

3个回答

7

这个问题和ClickOnce部署有关,相关的一个已关闭的问题提到了这个问题。

ApplicationDeployment类不可用 - 该类实现在System.Deployment assembly中,而该程序集不是 .NET Core 3.1 或 .NET 5 的一部分

我们将找到一种方法来公开该类启用的某些属性,例如 URL 参数和更新状态。但是,这项工作无法在 .NET 5 发布时完成。我们将在某个 .NET 6 预览版中启用它。以下是跟踪问题:#27 和 #53

在您部署的 ClickOnce 应用程序中使用 ApplicationDeployment 类是不可能的,但主要的 ClickOnce 体验可用。它包括:创建 ClickOnce 部署(清单)、发布应用程序、创建和发布更新。您的应用程序将自动进行更新检查(如果用户接受它,则进行更新)- 这部分由 ClickOnce 运行时和成为 .NET Core 3.1 和 .NET 5 应用程序 ClickOnce 部署入口点的新 Launcher 工具处理。

因此,目前似乎没有直接在 .NET Core 中完成此操作的方法。


2
而间接地如何实现呢? - Istvan Heckl
@IstvanHeckl 我的意思是这不是内置在框架中的。 - thatguy
4
好的,我明白它不在框架中。但是有什么替代方案吗?我仍然想显示CurrentVersion,我还想显示CurrentDeployment.DataDirectory(这样用户就知道mdf文件在哪里)。为了解决第一个问题,我可以硬编码一个字符串,并在有新版本时更改它(不好)。对于第二个问题,我没有任何想法。 - Istvan Heckl

4
在.NET方面已经取得了一些进展。根据微软员工的一条评论,现在你可以通过环境变量来检测这些值,就像在mage.exe中所做的那样。例如:
bool.TryParse(Environment.GetEnvironmentVariable("ClickOnce_IsNetworkDeployed"), out bool isNetworkDeployed);
Version.TryParse(Environment.GetEnvironmentVariable("ClickOnce_CurrentVersion"), out Version currentVersion);

这个 GitHub 问题的大部分讨论都是关于 .NET 7 的。然而,一些评论表明这段代码有自己独立的发布计划。我不知道它是否会在 Core 中可用,也不知道何时可用。


1
好主意,但请检查它在您的自定义情况下是否有效!对我来说不起作用,并且始终返回 False。(.NET Core 3.1,在Azure构建管道中使用 vsbuild(msbuild)创建了 ClickOnce 设置,而不是使用 mage.exe) - Beauty

3

1
但这是程序集版本(在您的SDK样式.csproj文件中的<AssemblyVersion>)。这不一定与ClickOnce发布版本相同(在您的.pubxml文件中的<ApplicationVersion>)。 - Hugh W

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