在 VS 2010 中将控制台应用程序转换为 WPF 应用程序时遇到问题

Posted

技术标签:

【中文标题】在 VS 2010 中将控制台应用程序转换为 WPF 应用程序时遇到问题【英文标题】:Trouble converting a console application to a WPF application in VS 2010 【发布时间】:2011-12-25 17:11:37 【问题描述】:

我创建了一个控制台应用程序,后来我决定将它作为 WPF 应用程序更好地运行。我将输出类型更改为 Windows 应用程序,并添加了我认为必要的参考。不幸的是,右键单击该项目不允许我添加资源字典或许多其他 WPF 类型。我错过了什么?

【问题讨论】:

一般来说,我会建议开始一个新项目并从控制台应用解决方案中复制/包含所有项目文件 您得到了哪个准确的错误信息?此外,最好将 GUI 和业务逻辑解耦。例如,您可以使用 Martin Fowler 的 MVP(模型-视图-演示者)模式,在它的两种风格中的一种(被动视图和另一种,我不记得名字了)。如果这样做,您可以拥有多个视图(控制台和 WPF),并使用其中任何一个 达里奥,你能重新发表你的评论作为答案吗?这就是我最终选择的路线。谢谢。 【参考方案1】:

我确实通过以下步骤将我的控制台应用程序转换为 WPF 应用程序 您需要做的就是更改项目文件中的项目类型 guid。 1. 添加对 PresentationCore 程序集的引用 2.添加对PresentationFramework程序集的引用 3.添加对WindowsBase程序集的引用 4. 转到项目属性,然后在应用程序选项卡上将输出类型更改为 Windows 应用程序。 5. 创建 WPF 应用程序的新项目并将 App.xaml 和 MainWindow 或任何其他 xaml 文件复制到您的控制台应用程序。 右键单击项目并选择添加时获取资源字典的最后一件事 打开您的项目文件,例如记事本上的 WpfApp.csproj 并添加

**<ProjectTypeGuids>60dc8134-eba5-43b8-bcc9-bb4bc16c2548;FAE04EC0-301F-11D3-BF4B-00C04F79EFBC</ProjectTypeGuids>**

FileAlignment 之后的第一个 PropertyGroup 元素中,它应该看起来像

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>58688A7B-82F4-4229-949A-C4249DAB43FC</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ConsoleApplication1</RootNamespace>
<AssemblyName>ConsoleApplication1</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>60dc8134-eba5-43b8-bcc9-bb4bc16c2548;FAE04EC0-301F-11D3-BF4B-00C04F79EFBC</ProjectTypeGuids>
<StartupObject>
</StartupObject>

保存。如果您的项目在视觉系统中打开,它会要求重新加载项目,请单击是。 就是这样,它现在作为 WPF 应用程序工作,你会发现添加 WPF 应用程序上可用的所有菜单。

【讨论】:

我还必须在我的 Program.cs 中添加“new app().Run(new MainWindow())”才能启动它。 [STAThread] 也是必需的。 没有 ProjectTypeGUID 属性,我可以手动添加文件并工作。添加项目 GUID 后,VS 解决方案资源管理器上下文菜单和项目模板开始显示 Window 和其他 wpf 类型【参考方案2】:

最简单的方法是创建一个新的 WPF 应用程序并移动代码。最好的方法是将逻辑推送到业务库中,这样您就可以轻松地使用控制台应用程序和 wpf 应用程序作为业务逻辑的表示技术,因为 WPF 是一种用户界面技术,而不是一种应用程序类型。

从极客的角度来看,如果你想解决学习困难的方法,我会创建一个单独的 WPF 应用程序并检查 proj 文件。很可能其中有一些东西可以使事情像 WPF 一样工作,以及一些缺失的引用。

【讨论】:

【参考方案3】:

我开始编辑来自 RAJ 的答案(因为那里列出的步骤不完整),但我的更改有点过于激烈,所以我决定单独发布我的答案。

您可以通过以下步骤将控制台应用程序转换为 WPF 应用程序:

    添加对以下程序集的引用: PresentationCore 演示框架 WindowsBase System.Xaml 打开项目属性。在应用程序选项卡上,将输出类型更改为 Windows 应用程序。 创建新的 WPF 应用程序(例如,将其命名为“tempWPF”)并将 App.xaml 和 MainWindow.xaml(以及两者的支持 .xaml.cs 文件)复制到您的控制台应用程序。 将所有出现的“tempWPF”替换为您的控制台项目的名称。 在 App.xaml 的“属性”窗口中,将 Build Action 设置为 ApplicationDefinition(如 here 所述)。 从项目中移除/删除 Program.cs 文件。 (当然,在必要时从该文件中重新定位任何自定义逻辑之后)。

    更改项目类型 guid。为此,请在 Notepad++ 或 directly in Visual Studio 中编辑您的项目文件(例如 WpfApp.csproj),在第一个 PropertyGroup 元素的某处添加以下行:

    <ProjectTypeGuids>60dc8134-eba5-43b8-bcc9-bb4bc16c2548;FAE04EC0-301F-11D3-BF4B-00C04F79EFBC</ProjectTypeGuids>
    

    在 Visual Studio 中重新加载您的项目。

【讨论】:

【参考方案4】:

正如其他人所说,制作 WPF 的实用方法是启动一个新的 WPF 应用程序项目并调整您的控制台代码。但是,Gregory A Beamer 指出您可能需要极客解决方案是正确的。

也许这是寻找正确选择的地方:

在菜单中,点击工具>>自定义。在“自定义”对话框中,点击“命令”选项卡,然后单击“编辑器上下文菜单”单选按钮。您现在可以在 VS 中编辑所有上下文菜单。我假设这些上下文菜单会为每种应用程序类型自动定制。用于向项目添加资源字典的上下文菜单应位于此处。尽管手动更改它们可能会很麻烦,但极客的一点是它们仍然存在。

【讨论】:

以上是关于在 VS 2010 中将控制台应用程序转换为 WPF 应用程序时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

在 VS2010 中将 FSharpx(来自 NuGet)与 F# 2.0 一起使用

Sharepoint 2010通过wsp将控制注册为安全

在 WP8 中将 ogg 文件解码为 wav

Sharepoint 2010 通过 wsp 将控制注册为安全

VS2010中将当前选定项目做为启动项

支持OS 7.0的Windows Phone Xap在市场上检测为7.1