首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包括来自类库的服务引用

包括来自类库的服务引用
EN

Stack Overflow用户
提问于 2009-02-09 19:35:24
回答 5查看 12.8K关注 0票数 23

我有一个C#类库和一个启动项目(一个控制台应用程序)。类库包括对web服务的服务引用。当我尝试运行该项目时,我得到了一个InvalidOperationException,因为启动项目没有读取类库的app.config,并且它忽略了服务引用。为了让它正常工作,我不得不在启动项目中添加相同的服务引用。有什么办法可以避免这种情况吗?是否可以使启动项目识别类库的服务引用和app.config,而不必将其复制到启动项目中?

我尝试从类库中添加一个指向app.config的链接,但不起作用。如果类库需要使用它的任何人将该服务引用添加到启动项目中,那么它的可移植性就不是很好。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-09 20:38:47

想想你正在尝试做什么--你有两个正在构建的程序集:

代码语言:javascript
复制
Library
ConsoleApp

这两个程序集都有配置文件-我认为它们看起来像这样:

代码语言:javascript
复制
Library
    app.config
ConsoleApp
    ConsoleApp.exe.config

当你运行ConsoleApp时,它无法从你的Library程序集中读取或了解app.config。它知道或关心的唯一配置文件是ConsoleApp.exe.config。现在可以让配置文件相互引用,但对于您正在尝试做的事情来说,这不是正确的解决方案。

由于您的Library程序集没有入口点,因此它永远不会加载到AppDomain中。因为它永远不会被加载到AppDomain中,所以它的应用程序配置文件将永远不会被使用。

您应该做的是通过项目引用在ConsoleApp中引用Library。然后将所有相关的配置数据从app.config移到ConsoleApp.exe.config中,因为这是您的应用程序将使用的配置文件。

这将允许您在web服务上调用方法时需要完成以下两件事

  1. 可以发送和接收SOAP消息的Library中的代码。
  2. Library运行所需的配置元数据。
票数 15
EN

Stack Overflow用户

发布于 2010-04-19 19:14:51

使用类库中的服务引用然后复制配置的另一种方法是使用调用svcutil.exe的生成事件。我喜欢的一点是,当服务发生变化时,您不必进行“更新服务引用”。它将自动更新。

在类库中,使用只生成代理代码的build事件:

代码语言:javascript
复制
svcutil.exe net.tcp://localhost:3315/MyService/mex /noConfig

在应用程序中,使用生成配置的build事件。您可以使用/mergeConfig选项将其合并到现有app.config中。

代码语言:javascript
复制
svcutil.exe net.tcp://localhost:3315/MyService/mex 
            /config:App.config /mergeConfig

如果您不希望在服务未运行时出现构建错误,请将此代码放入您的项目文件中,您将得到警告而不是错误:

代码语言:javascript
复制
<Target
    Name="PreBuildEvent"
    Condition="'$(PreBuildEvent)'!=''"
    DependsOnTargets="$(PreBuildEventDependsOn)">
  <Exec WorkingDirectory="$(OutDir)"
        Command="$(PreBuildEvent)"
        ContinueOnError="true" />
</Target>
票数 3
EN

Stack Overflow用户

发布于 2009-02-09 19:40:44

您只需将指向服务的配置键从类库配置文件复制到控制台应用程序的配置文件中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/529550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档