2

我在 Visual Studio 2005 中有一个 C# 解决方案。当我必须为确定的环境构建项目时,我必须更改一个项目中的 Web 引用,从 Visual Studio 中手动删除引用,然后添加一个新的相同的名称,但更改了网址。

我想让这个添加网络参考的手动过程不那么乏味。

我希望在配置管理器中,除了调试和发布配置、开发、预生产和生产配置之外,它们中的每一个都确定与特定环境关联的正确 Web 引用。

我正在考虑创建一个 preBuild 事件(可能是一个 .bat 文件),根据构建配置,可以正确创建 Web 引用。

我不确定如何做到这一点。我对此有一些疑问:

1)我可以创建不同的“app.config”文件,其中的属性

<setting name="MyService_serviceagent" serializeAs="String">
      <value>developmentEnvironmentURL</value>
</setting>

会因环境而异,我可以根据所选配置复制正确的 app.config 文件。

这会从网络参考中重新生成 Reference.cs 文件吗?(我猜不是)。即使界面没有改变,这会不会是一个问题,或者如果我只在我想重新生成类时手动重新生成网络引用就足够了?

2)这样做是个坏主意吗?您是否想到任何替代方案,或者当我想构建指向确定环境的解决方案时,是否更容易接受我应该删除并添加相应的 Web 引用?

感谢您阅读:)

问候。

4

1 回答 1

4

当我必须为确定的环境构建项目时,我必须更改一个项目中的 Web 引用,从 Visual Studio 中手动删除该引用,并添加一个具有相同名称的新引用,但更改 url。[...] 我正在考虑创建一个 preBuild 事件,在该事件中可以正确创建 Web 引用。

我认为这不是一个好的或可维护的解决方案。如果所有更改都是 URL,您能解释为什么您认为需要重新添加引用吗?为什么不能只更改 web.config 中的服务 URL?

无论如何,如果您必须有两个单独的引用,则将它们都添加,这样每个服务引用都可以有自己的配置。最终,您可以将这些服务引用放在一个单独的库中,您可以从主项目中引用该库。然后在需要您在代码中选择使用哪个实现的服务的项目中(例如,这可能取决于每个项目的环境变量,因此您可以在编译时确定它,或者只是一个配置值,以便选择正确的服务在运行时)。

第三种解决方案可能是不创建引用,而是利用ClientBase<T>您在运行时创建代理的位置。

于 2013-04-23T09:59:04.637 回答