开始使用 Visual Studio 2010 上的 Genesis Smart Client Framework






4.82/5 (9投票s)
如果您是 Genesis Smart Client 框架的新手,请阅读本文。它将指导您完成设置开发环境和执行第一个 Genesis 托管应用程序的过程。
引言
Genesis Smart Client 框架由 Blue Marble 开发,这是一家南非软件开发公司。该框架是为通过互联网向大量广泛受众分发应用程序而开发的。
通过提供动态应用程序工作区,该框架使开发团队能够专注于开发任务特定模块,而框架则负责保持客户端软件的最新模块版本,并为用户提供他们有权使用的模块的访问权限。
本文是编写第一个 Genesis Smart Client 框架应用程序的分步指南。我将指导您完成从下载 Code Plex 的最新源代码到构建和配置模板应用程序的过程。如果您有兴趣,本文后续将有一篇关于如何创建在 Genesis Smart Client 框架中运行的 Twitter 客户端的文章。
我将使用 Visual Studio 2010 和 Microsoft.NET 4.0 的最新源代码版本,但对于 Visual Studio 2008 和 Microsoft.NET 3.5SP1 版本,相同的步骤也适用。
下载最新源代码
要下载最新版本的源代码,请访问 Code Plex 并下载 **Genesis Source Code 1.60.1024.1 for Visual Studio 2010**(*当前最新版本*)。
**更新:我刚刚将源代码发布到 CodePlex 在线源代码控件。这提供了更便捷的项目访问,并有更多进度信息。可以在**这里**找到。**
为方便本文,我将假设您将源代码解压到 C:\Genesis\
步骤 1 - 构建源代码并部署数据库
提取源代码到 C:\Genesis\ 后,第一步是构建项目并部署数据库。
将源代码提取到 C:\Genesis\ 后,打开资源管理器并导航到 C:\Genesis\Stable\。您将看到以下目录
- **代码** - 包含杂项项目
- **数据库** - 包含数据库项目,包括 CLR 数据库项目
- **部署** - 包含 Genesis 附带的部署系统(*我将为这部分写一整篇文章*)
- **Genesis Smart Framework** - 大部分功能项目都在此文件夹中
- **脚本** - 包含安装程序的数据库脚本
- **设置** - 包含 Code Plex 上提供的安装程序的设置项目
- **解决方案** - 包含构成 Genesis 的解决方案
- **Web** - 包含 Web 项目
- **WebService** - 包含 Web 服务项目
要构建解决方案,请打开 **Solutions** 文件夹,然后转到 **Genesis Smart Client Framework** 子文件夹。在 Visual Studio 2010 中打开 *Genesis Smart Client Framework.sln*。

首次打开解决方案时,系统会提示您配置数据库连接字符串。

在执行此步骤之前,请确保您已在 SQL Server 中创建了数据库。

我的本地 SQL Server 位于 *(local)\SQL*,请将其更改为您的 SQL Server,包括身份验证设置。
一切设置完毕后,您应该会在解决方案资源管理器中看到以下解决方案。

*Genesis Smart Client Framework* 解决方案是核心解决方案,其中包含构成 Genesis Smart Client 框架的所有必需项目。包含以下项目
- **Genesis.Host** - 此项目是 Windows 窗体客户端应用程序。它实现了必需的 Genesis 接口,使其能够连接到 Genesis 服务器获取元数据,并托管 Genesis 托管应用程序。*此应用程序将确保托管应用程序的库始终保持最新版本,然后再执行它们。此应用程序还负责处理用户安全,并为托管应用程序提供工作界面。*
- **Genesis.Loader** - 此项目安装在客户端计算机上,通常使用 Click-Once。它连接到 Genesis.Filehost 并下载包含安装说明的 XML 文件。然后,此程序下载 Genesis.Host 的所有必需文件并执行主机。*此应用程序的目的是实现客户端计算机上的轻量级安装。此程序负责确保 Genesis.Host 始终保持最新,而 Genesis.Host 则确保其依赖的库(即托管应用程序)始终保持最新。*
- **Genesis.Client.Common** - 通用客户端库。
- **Genesis.Client.Host** - 特定于自定义主机实现的客户端库。
- **Genesis.Client.HostFormLibrary** - 包含用于自定义主机实现的特定标准窗体的客户端库。
- **Genesis.Client.Module** - 包含 Genesis 托管应用程序所需的所有接口和基类的客户端库。
- **Genesis.Client.Security** - 使客户端应用程序能够使用 Genesis 进行身份验证的客户端库。
- **BlueMarble.Genesis.sql** - Genesis 数据库的 SQL 项目。
- **GenesisDbClr** - Genesis 数据库的 CLR 数据库项目。
- **Genesis.Deployment** - Genesis 托管应用程序的部署工具。
- **Genesis.Management.Web** - Genesis Smart Client 框架的基于 Web 的管理系统。*此应用程序也作为 Genesis 托管应用程序的示例实现。*
- **Genesis.Management** - 此库是 Genesis 模块(又名 Genesis 托管应用程序)。此库包含告诉客户端应用程序如何行为所需的逻辑。*此模块作为 Genesis 托管应用程序的示例实现。*
- **Genesis.WebService** - 此 Web 服务包含暴露给客户端实现的所有服务器端逻辑。
- **Genesis.FileHost** - 此网站作为 HTTP 文件服务器。它包含 Genesis.Host 应用程序的当前版本、Genesis 托管应用程序库文件以及您的应用程序将集中存储供所有其他客户端访问的任何文件。
数据库部署
将 **BlueMarble.Genesis.SQL** 数据库项目部署到您已创建的数据库。部署数据库表和存储过程后,导航到本地计算机上的 C:\Genesis\Stable\Scripts,然后针对您的数据库运行 Data.SQL 脚本以设置初始数据。如果您遇到部署问题,可以按以下顺序运行脚本:*Tables.sql*、*StoredProcedures.sql*、*Assemblies.sql*、*Data.sql*。
在部署上述内容并将初始数据脚本化到数据库后,请运行以下数据修复,将标准安装版本与仅源代码版本进行一些更改
USE [Genesis]
GO
UPDATE Module_File SET FilePath = '..\..\Scripts\' WHERE FilePath = '.\Scripts\'
UPDATE Module_File SET FilePath = '..\..\Genesis Smart Framework\Genesis.Client.Host\bin\debug\' WHERE FilePath = '.\Client\'
UPDATE Module_File SET FilePath = '..\..\Resources\' WHERE FilePath = '..\Resources\'
UPDATE Module_File SET FilePath = '..\..\Code\Genesis.Management\bin\debug\' WHERE FilePath = '.\Management\'
UPDATE Module_File SET FileUrl = REPLACE(FileUrl, 'https:///genesis.filehost/', 'https://:1581/genesis.filehost/')
UPDATE Module_File SET [FileName] = REPLACE([FileName], '.dll', '.dllx')
UPDATE Security_User SET StartupScript = 'https://:1581/genesis.filehost/genesis/scripts/login.xml'
将 **GenesisDbClr** CLR 数据库项目部署到您已创建的数据库。(*确保您的数据库已启用 clr-enabled*)。如果您遇到部署问题,请导航到本地计算机上的 C:\Genesis\Stable\Scripts,然后针对您的数据库运行 Assemblies.SQL 脚本以创建 CLR 过程。
构建 C# 代码
您现在可以**构建**整个解决方案。
如果在构建过程中出现任何错误,请检查配置管理器并从构建步骤中删除以下项目
- **BlueMarble.Genesis.SQL** - 您已经构建并部署了它,无需继续构建和部署。
- **GenesisDbClr** - 您已经构建并部署了它,无需继续构建和部署。
- **Genesis.Installer** - 您没有安装它。
- **Genesis.Installer.Extensions** - 您没有安装它。
最终配置
您已成功部署数据库并构建了所有源代码,最后一步是更改 Web 和 Web 服务应用程序中必需的数据库连接字符串。检查以下应用程序的 web.config 或 app.config 文件。打开所需文件并检查 Genesis 数据库的连接字符串
- **Genesis.WebService** - *web.config* 更新 GenesisConnectionString 的值以匹配您的部署设置
- **Genesis.FileHost** - *web.config* 更新 GenesisConnectionString 的值以匹配您的部署设置
- **Genesis.Web** - *web.config* 更新 GenesisConnectionString 的值以匹配您的部署设置
在 *Genesis.FileHost* 项目中,更新 *web.config* 文件中的以下键
<add key="DevelopmentPath" value="..\..\Assemblies\"/> 改为 <add key="DevelopmentPath" value=".\"/>
编写 Genesis 托管应用程序
为了编写 Genesis 托管应用程序,我们将基于源代码提供的**模板解决方案**。因此,第一步是导航到本地计算机上的 C:\Genesis\Stable\Solutions\Template Solution\,然后在 Visual Studio 2010 中打开 *Template Solution.sln*。您应该会看到以下视图。

您会首先注意到先前解决方案中许多项目的重复。我将在此处排除它们。其余项目将在下面详细介绍
- **BlueMarble.Genesis.Client** - Genesis Client API 的自定义实现。它取代了先前解决方案中的 Genesis.Host 应用程序。
- **BlueMarble.Genesis.Client.Standard** - 包含客户端应用程序使用的一些标准 Windows 窗体。
- **Genesis.Application** - 此 C# 库实现了所有 Genesis Client 接口,并且是一个 Genesis 托管应用程序。
将 Genesis.Application C# 库设置为默认启动项目。打开此项目的属性,然后转到“调试”部分。将“启动操作”设置为“启动外部程序”,并将要启动的程序设置为 **c:\Genesis\Code Plex\Code\BlueMarble.Genesis.Client\bin\Debug\BlueMarble.Genesis.Client.exe**。这将确保自定义 Genesis 主机实现启动。

您还必须将“生成事件”的“生成后事件命令行”设置为 **start iexplore https://:1581/genesis.filehost/update.aspx?DevelopmentPath=$(ProjectDir)**,并将“运行生成后事件”设置为**当生成更新项目输出时**。

构建并运行您的应用程序
您现在应该会看到以下构建输出

在上图中,您将看到 Genesis 文件主机在构建完成后收集的所有文件。每次构建更改时都会发生这种情况,并确保您在调试时获得最新版本的代码。之所以需要这样做,是因为 Genesis Client Host 应用程序将下载并执行服务器上当前的代码,因此如果您忘记更新服务器,将会在确定代码为何无法正常调试时遇到无休止的问题。
需要注意的是,更新过程将每次检查 Development Path 中的 DLL 文件,并将 Module_File 表中的文件版本设置为与 DLL 匹配。这意味着您每次在构建之间设置文件版本,以确保客户端应用程序在调试时下载最新版本的 DLL。还需要注意的是,如果本地版本与服务器版本匹配,您的客户端应用程序将不会下载 DLL。每次希望构建和测试调试结果时,更改版本号都很重要。
您现在可以关闭带有更新输出的浏览器,您会注意到另一个窗口已经打开。

使用以下用户名/密码登录:*user1*/*user1*。
系统预先验证您后,您应该会注意到组合框中有一个应用程序。*Genesis Management System 2010* 用于配置 Genesis Smart Client Framework。单击“登录”继续。过程完成后,您应该会看到以下屏幕

您现在已成功编译 Genesis Smart Client Framework,并成功启动了 Genesis Management System 2010。您使用 Genesis Management System 2010 配置 Genesis 可以托管的任何新应用程序。下一步是采用源代码中提供的 Genesis.Application 模板并进行配置,以便我们可以运行托管应用程序。
配置模板应用程序
要配置 Genesis.Application 模板,请打开 Genesis 管理菜单,然后单击“应用程序”项。

您将看到 Genesis Smart Client Framework 服务器上当前可用的托管应用程序列表。单击右上角的“新建应用程序”图标以创建新的托管应用程序配置。

在提供的字段中输入以下信息
- **应用程序名称** - 输入应用程序的名称。
- **描述** - 输入应用程序的描述。
- **顺序** - 输入当有多个应用程序可用时,应用程序应显示的顺序。

单击右上角的“保存”图标,然后转到页面下半部分查看有权访问您应用程序的安全角色。选择以下角色
- 注册用户
- Genesis 应用程序用户

继续打开“Genesis Administration”菜单并单击“文件”菜单项。您将看到以下屏幕,单击右上角的“新建文件”图标。

在提供的字段中输入以下信息
- **文件名** - 包含托管应用程序的 DLL 的名称。对于模板应用程序项目,默认名称将是 *Genesis.Application.dll*。
- **类型** - 对于 DLL,将类型设置为 Library。
- **描述** - 输入文件的描述。
- **应用程序** - 从列表中选择您创建的应用程序。
- **顺序** - 客户端下载和处理文件的顺序。
- **路径** - Genesis.FileHost 更新过程从中拾取文件以处理到服务器文件存储的本地路径。*模板应用程序的默认值为 ..\..\Code\Genesis.Application\bin\Debug\*
- **URL** - Genesis.FileHost 文件存储将使文件可用的在线位置。*模板应用程序的默认值为 https://:1581/genesis.filehost/myApp/libraries/Genesis.Application.dllx*
- **版本** - 添加新 DLL 时,只需输入 1.0.0.0 作为版本。Genesis.FileHost 更新过程将自动设置版本号。

当您运行更新过程时,*您可以右键单击 Genesis.FileHost 项目中的 Update.ASPX 页面,然后选择“在浏览器中查看”,或者浏览到 https://:1581/genesis.filehost/update.aspx*,您将看到以下输出,包括 Genesis.Application.dll

运行此过程后,您可以重新运行应用程序,并重新登录 **Genesis Management System 2010**。重要提示:默认应用程序应该是您创建的新应用程序!尝试登录此应用程序将会失败。
登录后,打开“Genesis Administration”菜单并单击“命令”菜单项。然后您将看到以下屏幕,您可以在其中查看所有已注册的命令

必须对以下命令应用以下更改
- Genesis.Application.Commands.ShowDefaultForm
- Genesis.Application.Commands.ShowMessage
打开命令,导航到页面底部。在那里您将看到一个部分,您可以在其中为每个命令分配用户角色。这将允许属于该角色的用户在客户端应用程序上执行命令。


单击页面右上角的“保存命令”图标。
同时检查 *Genesis.Common.ShowBrowser* 命令是否已分配了*注册用户*和*Genesis 应用程序用户*角色。
由于您的应用程序将使用 Genesis.Client.Host 库的组件,例如内置的 Web 浏览器,因此您需要将其定义为应用程序的必需文件。为此,请打开“Genesis Administration”菜单并单击“文件”菜单项。单击页面右上角的“新建文件”图标。
在提供的字段中输入以下信息
- **文件名** - Genesis.Client.Host.dll
- **类型** - Library。
- **描述** - Genesis Management System 的 Genesis Client Host 库。
- **应用程序** - 从列表中选择您创建的应用程序。
- Order - 100.
- **路径** - ..\..\Genesis Smart Framework\Genesis.Client.Host\bin\debug\
- **URL** - https://:1581/genesis.filehost/genesis/libraries/genesis.client.host.dllx
- 版本 - 1.60.1024.1
在元数据中注册 Genesis.Client.Host.dll 文件后,您还需要为 *Genesis.Common.ShowBrowser* 添加命令条目。打开“Genesis Administration”菜单并单击“Commands”菜单项。单击页面右上角的“New Command”图标。
在提供的字段中输入以下信息
- **文件** - Genesis.Client.Host.dll
- **命令名称** - Web Browser。
- **描述** - 此命令显示 Web 浏览器。
- **类型** - Genesis.Client.Host.Commands.Common.ShowWebBrowser
单击页面右上角的“保存”图标,然后为命令添加以下角色
- 注册用户
- Genesis 应用程序用户
您现在可以关闭 Genesis Management System 2010
您已准备好运行您的 Genesis 托管应用程序!
您现在已准备好运行自定义 Genesis 托管应用程序。按 F5 调试应用程序。在登录屏幕上,输入 *user1*/*user1*,然后从应用程序组合框中选择您的应用程序,然后单击“登录”。
您的应用程序应该会运行,并执行用户的启动脚本。

不过,您不会注意到太多其他内容,但是您已经设置好了项目,现在可以开始向模板应用程序添加自己的代码了。让我们来看一下 Genesis.Application 项目。

当我们查看项目中的文件时,有 4 个文件需要我们关注
- **AssemblyInfo.cs** - 每次更改程序集时,在调试之前,都必须更改版本号。
- **Commands\ShowDefaultForm.cs** - 标准 Genesis 命令,此命令显示默认窗体 *Forms\DefaultForm.cs*。
- **Commands\ShowMessage.cs** - 标准 Genesis 命令,此命令使用 System.Windows.Forms.MessageBox.Show 来显示带有参数的消息。
- **Forms\DefaultForm.cs** - 标准 Windows 窗体。此窗体通过 ShowDefaultForm 命令显示。
使用 *Genesis Management System 2010*,您可以配置客户端应用程序的菜单和工具栏以包含指向您的命令的引用。只有当经过身份验证的用户有权访问它们时,这些命令才会生成可见的菜单/工具栏端点。
再次重新运行客户端应用程序,这次重新登录到 *Genesis Management System 2010*。打开“Genesis Administration”菜单并单击“Ribbon”菜单项。通过单击页面右上角的“Create Ribbon”图标创建新的 Ribbon。


在提供的字段中输入以下信息
- **Ribbon Name** - My First Menu
- **Application** - My First Genesis Application
- Order - 100
将*注册用户*和*Genesis 应用程序用户*角色添加到此项。
由于原始框架是使用 Ribbon Bar 控件开发的,因此配置命名约定侧重于 Ribbon 布局。但是,它被映射到普通的菜单/工具栏配置。
打开“Genesis Administration”菜单并单击“Ribbon Bars”菜单项。通过单击页面右上角的“Create Ribbon Bar”图标创建新的 Ribbon Bar。


在提供的字段中输入以下信息
- **Ribbon Bar Name** - Seperator 1
- **Application** - My First Menu
- Order - 100
将*注册用户*和*Genesis 应用程序用户*角色添加到此项。
由于 Ribbon Bar 布局与标准菜单(例如模板应用程序和自定义客户端主机应用程序使用的菜单)之间存在差异。
打开“Genesis Administration”菜单并单击“Item”菜单项。通过单击页面右上角的“Create Bar Item”图标创建新的 Bar Item。

在提供的字段中输入以下信息
- **Bar Name** - My Menu Item
- **Parent Bar Item** - <Root Item>
- **Bar Item Type** - Button Item
- **Ribbon Bar** - Seperator 1
- **Command** - Default Form
- **Image** - 从列表中选择任何图像,并在*Size*值中输入 **16**。
- Order - 100
将*注册用户*和*Genesis 应用程序用户*角色添加到此项。
最后步骤
如果您在调试模式下重新运行应用程序,这次登录到 *My First Genesis Application* 应用程序,您将看到一个新菜单。单击 *My First Menu* 菜单,然后单击 *Menu* 菜单项。


填写字段并单击“Show”按钮以执行 ShowMessage 命令。

您已成功创建并托管了您的第一个 Genesis 托管应用程序。继续对其进行自定义。
在我的下一篇文章中,我将继续本文的后续内容,创建在 Genesis Smart Client 框架中运行的自定义 Twitter 客户端。
其他信息
Blue Marble 很自豪能成为一家 Microsoft BizSpark 初创公司。
更新
- **2010 年 4 月 24 日** - 更新了下载说明。
- **2010 年 4 月 19 日** - 在 CodePlex 在线源代码控件上发布了源代码。更新了文章以反映此信息。