首页 文章

引用类库项目中的Xdt转换?

提问于
浏览
1

我有这三个项目的解决方案 .

  • Web API

  • DAL

  • 域名

DAL项目是一个具有Web引用的类库 . 因此,该项目中的app.config有一个这样的部分:

<applicationSettings>
    <Company.Project.Domain.Properties.Settings>
      <setting name="Company_Project_Domain_Some_Service" serializeAs="String">
        <value>http://my.server.local:8888/somePath/service.asmx</value>
      </setting>
    </Company.Project.Domain.Properties.Settings>
  </applicationSettings>

我安装了slow cheetah并在此DAL项目中使用了配置转换 . 例如,我有一个app.production.config,它将上面的Web引用转换为指向 生产环境 Web引用,如下所示:

<applicationSettings>
    <Company.Project.Domain.Properties.Settings>
      <setting name="Company_Project_Domain_Some_Service" serializeAs="String">
        <value>http://my.PRODUCTIONSERVER.local:8888/somePath/service.asmx</value>
      </setting>
    </Company.Project.Domain.Properties.Settings>
</applicationSettings>

当我发布API时,web.config不包含上面显示的任何应用程序设置 . 我可以使用反射器钻入DAL.dll并查看service.asmx路径 . 但是,它不进行转换,因此发布的应用程序不使用my.PRODUCTIONSERVER.local:8888 .

因此有两个问题 .

  • 为什么发布NOT在引用的类库中使用xdt变换?

  • 如果应用程序设置块必须位于Web API项目的web.config中,这是否意味着我应该从DAL中删除Web引用并将其添加到Web API项目中? ...或者我可以单独保留引用并将相关的applicationSettings块复制到web.config中吗?

1 回答

  • 0

    首先将Web引用添加到库中似乎不是一个好主意 . 因为库是可重用的代码片段,它们是自包含的,可以在不同的项目中使用 . 根据这个逻辑,我很想知道为什么你选择将DAL分成项目而不是Web API中的另一个文件夹 . 但是我会稍后再讨论 .

    要回答你的第一个问题,

    为什么发布NOT不会在引用的类库中使用xdt变换?

    发布仅转换您要发布的Web应用程序内的配置 . 我不确定你是如何发布你的应用程序,但如果你使用命令行,你可能会做这样的事情 .

    msbuild /p:PublishOnBuild WebApi.csproj
    

    MsBuild使用您的.csproj文件来构建和发布您的应用程序 . 在.csproj中包含转换所需的信息 . 因此,MsBuild不知道它需要从引用的库转换app.config,这就是为什么你的DAL配置没有被转换而只是被复制 .

    继续你的第二个问题

    如果应用程序设置块必须位于Web API项目的web.config中,这是否意味着我应该从DAL中删除Web引用并将其添加到Web API项目中? ...或者我可以单独保留引用并将相关的applicationSettings块复制到web.config中吗?

    你有几个选择,

    • 如您所述,将Web引用移动到Web API项目,并在web.config中控制URI . 这意味着您需要从DAL引用Web API .

    • 将应用程序设置块移动到web.config,但将您的Web引用保留在DAL中 . 然后,您可以在运行时设置服务的URI . 如图所示here

    • [理想]将DAL合并到Web Api中 . 我觉得这很理想,因为除非你想跨项目分享DAL,否则没有理由把它移到一个单独的项目中 . 事实上,你似乎面临着这个问题,因为你首先把它移出去了 . 所以除非你有充分的理由这样做,否则这是最好的选择 .

相关问题