65.9K
CodeProject 正在变化。 阅读更多。
Home

重命名 Visual Studio 项目并解决 Silverlight 应用程序的相关问题

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (3投票s)

2012年4月22日

CPOL

11分钟阅读

viewsIcon

60335

downloadIcon

270

一步步指南,详细介绍在 Visual Studio 2010 解决方案中重命名 Silverlight 应用程序的项目并解决相关问题。

引言

Visual Studio 允许我们创建自定义项目模板,以便基于现有项目的设置和引用来添加新项目。开发人员可以使用此方法,在新项目添加时重命名项目及其相关的程序集和默认命名空间。但是,对于解决方案中已有的项目,手动更改这些名称似乎更实际和直接。手动重命名任务对于 ASP.NET、WPF 或 Windows 应用程序来说并不难,但对于 Silverlight Web 应用程序则需要一些特殊的注意事项。本文提供了一个指南,介绍如何重命名 Silverlight 项目,重置因名称更改而产生的项目之间的链接,并解决一些相关问题,从而使应用程序即使在进行大量名称更改后也不会崩溃。

让我们从我上一篇帖子中的演示应用程序开始,该应用程序包含常规的 Silverlight 应用程序项目和 WCF RIA Services 类库项目。您可以从那里下载源代码文件,并使用该解决方案和项目作为起点。

Web 托管服务器项目

我们将把与 Web 托管项目相关的所有名称从 *ProductApp.Web* 更改为 *StoreApp.Web*。

  1. 在 Visual Studio 解决方案中,双击 *ProductApp.Web* 项目名称,或右键单击项目名称然后选择 *重命名*。将名称文本更改为 *StoreApp.Web*。重命名项目将自动更改物理项目元数据文件(C# 中为 *.csproj*)的名称,并更新解决方案中任何使用重命名项目的其他项目的引用。

    1.png

  2. 确保将 *StoreApp.Web* 选为当前项目。通过单击“编辑”菜单中的“查找和替换”,然后选择“快速替换”屏幕。在当前项目的文件中,将所有 `ProductApp.Web` 的实例替换为 `StoreApp.Web`。

    2.png

  3. 右键单击项目名称,选择“属性”,然后选择“应用程序”侧边菜单。将“程序集名称”和“默认命名空间”字段中的当前文本都更改为 *StoreApp.Web*。为了清晰和易于维护,我们将保持程序集名称和默认命名空间与项目名称相同,尽管这些名称可以不同。

    3.png

  4. 在“解决方案资源管理器”中单击“显示所有文件”图标,然后删除 `bin` 文件夹中的 *ProductApp.Web.dll* 和 *ProductApp.Web.pdb*。或者,如果里面没有手动输入库源文件,我们可以删除 `bin` 文件夹,然后让生成过程重新填充它。此步骤不是必需的,但这样做可以使项目保持整洁。

    4.png

  5. 按 *Ctrl + Shift + S* 组合键保存所有文件,然后通过单击“文件”菜单中的“关闭解决方案”命令来关闭解决方案。

    特别注意:在以下步骤中重命名物理项目位置文件夹以及进行解决方案或项目元数据文件内容更改时,请务必在 Visual Studio 外部进行。

  6. 使用“Windows 资源管理器”转到解决方案的物理根文件夹,将解决方案根文件夹下的 *ProductApp.Web* 文件夹重命名为 *StoreApp.Web*。

  7. 使用“记事本”或任何其他文本编辑器打开 *ProductApp.sln* 文件。找到下面显示的行。

    Project("{-GUID number-}") = "StoreApp.Web", "ProductApp.Web\StoreApp.Web.csproj", "{-GUID number-}"
    EndProject

    在代码中将相对目录路径从 `ProductApp.Web` 更改为 `StoreApp.Web`,然后保存文件。

    Project("{-GUID number-}") = "StoreApp.Web", "StoreApp.Web\StoreApp.Web.csproj", "{-GUID number-}"
    EndProject
  8. 通过在“文件”菜单的“最近使用的项目和解决方案”中选择 *ProductApp.sln* 来重新打开解决方案。通过按 F5 运行应用程序时,它应该可以正常工作。

Silverlight 客户端项目

我们将把与主客户端项目相关的所有名称从 *ProductApp* 更改为 *StoreApp.Main*。与任何其他类型的项目相比,此类项目的重命名和相关问题涉及的步骤更多。

  1. 在“解决方案资源管理器”中,使用与 Web 托管项目相同的步骤将项目名称 *ProductApp* 更改为 *StoreApp.Main*。

  2. 确保将 *StoreApp.Main* 选为当前项目。使用“快速替换”屏幕,在当前项目的文件中将所有 `ProductApp` 的实例替换为 `StoreApp.Main`。

    5.png

  3. 右键单击项目名称,选择“属性”,然后选择“Silverlight”侧边菜单。执行以下更改。

    • 将“程序集名称”字段中的当前文本重命名为 *StoreApp.Main*
    • 将“默认命名空间”中的当前文本重命名为 *StoreApp.Main*
    • 在“启动对象”下拉列表中选择更新后的 *StoreApp.Main.App*
    • 在“Xap 文件名”字段中,将 *ProductApp.xap* 更改为 *StoreApp.Main.xap*

    更新后的“属性”屏幕应如下所示

    6.png

  4. 在“显示所有文件”模式下,删除 `bin` 文件夹下的 `Debug` 文件夹(如果里面没有手动输入库源文件)。否则,只需删除旧的 *ProductApp.dll*、*ProductApp.pdb*、* ProductApp.xap* 和 *ProductAppTestPage.html*。此步骤也是可选的。

  5. 展开 `obj` 文件夹,并删除其中的 `Debug` 文件夹。Visual Studio 将在下次生成过程中重新填充 `Debug` 文件夹。这是一个非常重要的步骤。如果遗漏此步骤,由于 `obj\Debug` 文件夹中缓存的程序集文件未刷新,更改后的程序集名称将不会生效。我们会遇到运行时错误或数据绑定失败。重启开发 Web 服务器或 IIS,或重新打开 Visual Studio 都无法解决。此行为仅针对 Silverlight 项目(C# 和 VB),不适用于 ASP.NET、WPF 或 Windows 项目等所有其他类型。

    7.png

  6. 保存所有文件并关闭解决方案(有关修改物理项目文件夹名称和元数据文件内容,请参阅前面的特别说明)。

  7. 使用“Windows 资源管理器”转到解决方案的物理根文件夹,将根解决方案文件夹下的 *ProductApp* 文件夹重命名为 *StoreApp.Main*。

  8. 使用“记事本”或任何其他文本编辑器打开 *ProductApp.sln* 文件。找到下面显示的行。

    Project("{-GUID number-}") "StoreApp.Main", "ProductApp\StoreApp.Main.csproj", "{-GUID number-}"
    EndProject

    在代码中将相对目录路径从 `ProductApp` 更改为 `StoreApp.Main`,然后保存文件。

    Project("{-GUID number-}") "StoreApp.Main", "StoreApp.Main\StoreApp.Main.csproj", "{-GUID number-}"
    EndProject
  9. 仍在“Windows 资源管理器”中,打开 *StoreApp.Main* 文件夹下的 *StoreApp.Main.csproj* 项目文件。找到该行

    <TestPageFileName>ProductAppTestPage.html</TestPageFileName>

    在代码中将 `ProductAppTestPage.html` 更改为 `StoreAppMain.html`,然后保存文件。

    <TestPageFileName>StoreAppMain.html</TestPageFileName>
  10. 重新打开解决方案。在 Web 服务器 *StoreApp.Web* 项目中,将 *ProductAppTestPage.aspx* 重命名为 *StoreAppMain.aspx*,将 *ProductAppTestPage.html* 重命名为 *StoreAppMain.html*。请参阅第 12 步下的屏幕截图。

  11. 由于 Web 项目和客户端项目之间存在链接,服务器在从客户端项目更改名称时会自动更新 xap 文件名。但是,起始页文件中的 xap 文件名未更新。我们需要打开 *StoreAppMain.aspx* 和 *StoreAppMain.html* 文件,然后找到 object 节点下的第一个 param 节点。在代码中将 xap 文件名从 `ProductApp.xap` 更改为 `StoreApp.Main.xap`。更新后的代码如下所示。

    <param name="source" value="ClientBin/StoreApp.Main.xap"/>
  12. ClientBin 文件夹中的旧 *ProductApp.xap* 将不会被使用。我们可以删除它。

    8.png

  13. 在“解决方案资源管理器”中,右键单击 *StoreAppMain.aspx* 并选择“设为启动页”。通过按 F5 运行应用程序时,它应该可以正常工作。

RIA Services 类库服务器项目

我们将把与 RIA Services 服务器项目相关的所有名称从 *ProductRiaLib.Web* 更改为 *StoreRiaLib.Web*。重命名 RIA Services 类库服务器项目的步骤与 Web 托管服务器项目类似。如有需要,请参阅相应的屏幕截图。

  1. 在“解决方案资源管理器”中将 *ProductRiaLib.Web* 重命名为 *StoreRiaLib.Web*。这将自动更改物理项目元数据文件名,并更新 Web 托管服务器项目 *StoreApp.Web* 中设置的项目引用。

  2. 确保将 *StoreRiaLib.Web* 选为当前项目。使用“快速替换”屏幕,在当前项目的文件中将所有 `ProductRiaLib.Web` 的实例替换为 `StoreRiaLib.Web`。

  3. 在项目“属性”屏幕的“应用程序”部分,将“程序集名称”和“默认命名空间”字段中的现有文本都更改为 *StoreRiaLib.Web*。

  4. 删除 bin 文件夹中的 *ProductRiaLib.Web.dll* 和 *ProductRiaLib.Web.pdb* 以保持项目整洁。

  5. 保存所有文件并关闭解决方案(有关修改物理项目文件夹名称和元数据文件内容,请参阅前面的特别说明)。

  6. 使用“Windows 资源管理器”转到解决方案的物理根文件夹,将根解决方案文件夹下的 *ProductRiaLib.Web* 文件夹重命名为 *StoreRiaLib.Web*。

  7. 使用“记事本”或任何其他文本编辑器打开 *ProductApp.sln* 文件。找到下面显示的行。

    Project("{-GUID number-}") = "StoreRiaLib.Web", "ProductRiaLib.Web\StoreRiaLib.Web.csproj", "{-GUID number-}"
    EndProject

    在代码中将相对目录路径从 `ProductRiaLib.Web` 更改为 `StoreRiaLib.Web`,然后保存文件。

    Project("{-GUID number-}") = "StoreRiaLib.Web", "StoreRiaLib.Web\ StoreRiaLib.Web.csproj", "{-GUID number-}"
    EndProject
  8. 重新打开解决方案。在完成下一节中 RIA Services 类库客户端项目中的更改之前,请勿生成或运行应用程序。

    9.png

  9. 如果数据库文件位于此项目的 *App_Data* 文件夹中,并且连接字符串中使用了绝对路径,则需要更改 Web 托管服务器项目(在本例中为 *StoreApp.Web* 项目)的 *Web.config* 文件中的连接字符串。在连接字符串的“数据源”中,将 *ProductRiaLib.Web* 更改为 *StoreRiaLib.Web*。

    <connectionStrings>    
        <add name="ProductDbContext" connectionString="Data Source=[Your-StoreApp-Solution-Path]\StoreRiaLib.Web\App_Data\ProductData.sdf" providerName="System.Data.SqlServerCe.4.0"/>
    </connectionStrings>

RIA Services 类库客户端项目

我们将把与 RIA Service 客户端项目相关的所有名称从 *ProductRiaLib* 更改为 *StoreRiaLib.Client*。除了与 RIA Services 类库服务器项目类似的步骤外,还需要进行其他一些干预。

  1. 在 Visual Studio “解决方案资源管理器”中将 *ProductRiaLib* 重命名为 *StoreRiaLib.Client*。这将自动更改物理项目元数据文件名,并更新 Silverlight 客户端项目 *StoreApp.Main* 中设置的项目引用。

  2. 确保将 *StoreRiaLib.Client* 选为当前项目。使用“快速替换”屏幕,在当前项目的文件中将所有 `ProductRiaLib` 的实例替换为 `StoreRiaLib.Client`。

  3. 右键单击项目名称,选择“属性”,然后选择“Silverlight”侧边菜单。执行以下更改。

    • 将“程序集名称”字段中的当前文本重命名为 *StoreRiaLib.Client*
    • 将“默认命名空间”中的当前文本重命名为 *StoreRiaLib.Client*
    • 在“WCF RIA Services 链接”下拉列表中选择更新后的 *StoreRiaLib.Web*

    更新后的“属性”屏幕应如下所示

    10.png

  4. 删除 bin 文件夹中的 *ProductRiaLib.Web.dll* 和 *ProductRiaLib.Web.pdb* 以保持项目整洁。

  5. 保存所有文件并关闭解决方案(有关修改物理项目文件夹名称和元数据文件内容,请参阅前面的特别说明)。

  6. 使用“Windows 资源管理器”转到解决方案的物理根文件夹,将根解决方案文件夹下的 *ProductRiaLib.Web* 文件夹重命名为 *StoreRiaLib.Web*。

  7. 使用“记事本”或任何其他文本编辑器打开 *ProductApp.sln* 文件。找到下面显示的行。

    Project("{-GUID number-}") = "StoreRiaLib.Client ", "ProductRiaLib\StoreRiaLib.Client.csproj", "{-GUID number-}"
    -some other nodes-
    EndProject

    在代码中将相对目录路径从 `ProductRiaLib.Web` 更改为 `StoreRiaLib.Web`,然后保存文件。

    Project("{-GUID number-}") = "StoreRiaLib.Client ", "StoreRiaLib.Client\StoreRiaLib.Client.csproj", "{-GUID number-}"
    -some other nodes-
    EndProject
  8. 使用“记事本”或任何其他文本编辑器打开 *StoreRiaLib.Client* 文件夹下的 *StoreRiaLib.Client.csproj* 文件。查找 `LinkedServerProject` 节点是否指向了正确的物理服务器位置。如果不是,请用下面显示的正确路径更新它。

    <LinkedServerProject>..\StoreRiaLib.Web\StoreRiaLib.Web.csproj</LinkedServerProject>
  9. 重新打开解决方案。

  10. 在生成或运行应用程序之前,我们需要在所有使用 RIA Services 的 Silverlight 客户端项目中替换旧的 RIA Services 命名空间引用为新的。数据始终在 RIA Services 服务器项目的命名空间中提供,在我们更新后的情况下是 *StoreRiaLib.Web*,尽管实际上访问的是 RIA Services 客户端项目中的客户端代理文件代码。将 *StoreApp.Main* 项目选为当前项目,并使用“快速替换”屏幕将所有 `ProductRiaLib.Web` 的实例替换为 `StoreRiaLib.Web`。

    11.png

    请注意,此步骤的原则适用于任何将类库项目的命名空间更改并通过使用者项目引用的情况。例如,如果我们有一个 *ProductApp.Common* 类库,其命名空间名称相同,当将项目和命名空间重命名为 *StoreApp.Common* 时,使用该库的所有项目的命名空间引用或前缀都需要在代码中更改为 *StoreApp.Common*。

  11. 按 F5 运行应用程序。应用程序应该可以正常工作,与所有项目重命名之前一样。

还有什么?

到目前为止,所有功能部分都已重命名并正常工作。但是,解决方案名称、解决方案物理文件名以及解决方案内的虚拟解决方案文件夹(如果存在)的名称仍然是旧的。

12.png

通过直接在“解决方案资源管理器”中更改名称文本,可以轻松地重命名解决方案和解决方案虚拟文件夹。在重命名解决方案时,解决方案物理文件名会自动更新。重命名虚拟解决方案文件夹名称与解决方案的其他部分完全独立。

演示应用程序的所有最终名称如下所示。

13.png

摘要

重命名 Silverlight 应用程序的项目并解决相关问题并不容易。架构师和开发人员需要仔细规划项目的名称,以避免进行与名称相关的更改。但万一在开发阶段、项目扩展阶段或导入其他资源的项目时需要重命名项目,并且遇到命名问题,您可以按照本指南自由进行重命名任务。

© . All rights reserved.