在Web和控制台应用之间共享配置文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Web和控制台应用之间共享配置文件相关的知识,希望对你有一定的参考价值。

我有一个Core类lib,里面有我所有的逻辑。

我有一个使用IIS的Web应用程序。

我有一个使用Http Listener的控制台应用程序。

两个主机项目都引用其中包含connectionStringSource.config文件的Core lib。

hosts项目使用Add As Link到Core中的connectionStringSource.config并设置为Copy To Output。在它拥有的IIS主机项目中的web.config中

<connectionStrings configSource="binconnectionStringSource.config"></connectionStrings>

但是我得到:

[ArgumentException:路径中的非法字符。] [ConfigurationErrorsException:configSource属性无效:路径中的字符非法。 (第13行)]

如果我换到

<connectionStrings configSource="bin/connectionStringSource.config"></connectionStrings>

它说

configSource属性必须是相对物理路径,因此不允许使用“/”字符。

有没有办法分享这些设置?

我遵循了建议herehere,但他们似乎没有工作。

答案

将connections.config文件添加到SolutionItems解决方案文件夹中

在我的情况下它包含

<connectionStrings>
  <add name="MyContext"
       connectionString="Data Source=ServerNamedInstance;Initial Catalog=MyDB;Integrated Security=True;MultipleActiveResultSets=True"
    providerName="System.Data.SqlClient" />
</connectionStrings>

单击任何项​​目并编辑app.config或web.config

<connectionStrings configSource="connections.config"></connectionStrings>

现在单击项目并选择Add existing item,然后通过单击Add as Link将connections.config添加为链接。

现在右键单击该项目并选择Unload project

现在单击该项目,然后选择“编辑项目”

您将看到以下内容:

  <ItemGroup>
        <None Include="..connections.config">
          <Link>connections.config</Link>
        </None>
        <None Include="App.config" />
      </ItemGroup>

为了能够引用此文件,我们需要说复制链接的内容文件以滚动到底部并添加

 <Target Name="CopyLinkedContentFiles" BeforeTargets="Build">
    <Copy SourceFiles="%(Content.Identity)" DestinationFiles="%(Content.Link)" SkipUnchangedFiles="true" OverwriteReadOnlyFiles="true" Condition="'%(Content.Link)' != ''" />
  </Target>

重新加载项目。

对需要共享connections.config的项目重复上述步骤。

你可以有一个connections.release.config。然后在你的Web.Release.config中添加

 <connectionStrings xdt:Transform="SetAttributes" configSource="connections.release.config" />
另一答案

事实证明我在这里登录的主机有一个bug.Owin.IIS https://github.com/aspnet/Home/issues/95

以上是关于在Web和控制台应用之间共享配置文件的主要内容,如果未能解决你的问题,请参考以下文章

在控制台和 Web 应用程序之间共享 AppSettings 和 ConnectionStrings

如何在解决方案中的项目之间共享单个配置?

HTTP 文件共享服务器工具 - chfs

在 Sinatra 和 Rails 之间共享 Yaml 配置文件

Android 和 Web App 共享 Kotlin 代码

片段之间的共享数据(父列表视图和子列表视图)