在 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 一起使用