Nuget XDT转换不适用于配置文件

时间:2018-12-05 13:33:47

标签: nuget nuget-package .net-standard xdt-transform

我有.NetStandard库。我将在.NetFramework.NetCoreApp应用程序中使用它。

它使用System.Configuration.ConfigurationManager软件包来处理配置文件。我需要在安装库的过程中转换这些配置文件。

我发现了两种方法:

    nuget包中的
  1. tools文件夹,其中包含install.ps1文件
  2. content文件夹,其中包含app.config.install.xdt个文件

它们中的任何一个都不起作用-nuget无法运行install.ps1,nuget不能转换App.config

csproj提供了一个代码:

<ItemGroup>
  <Content Include="Content\app.config.install.xdt">
    <PackagePath>content</PackagePath>
  </Content>
</ItemGroup>

Nuget程序包包含此文件...所以我不知道为什么它不起作用。

此问题与.NetStandard相关吗?我在做什么错了?

1 个答案:

答案 0 :(得分:0)

执行ps1脚本和XDT转换都是仅与packages.config but not PackageReference一起使用的功能。 .NET Core(我认为是.NET Standard)项目仅适用于SDK样式的项目,而SDK样式的项目仅支持PackageReference。 Packages.config仅适用于“旧式”项目,也可以使用PackageReference。

Microsoft的ASP.NET Core库处理此差异的方式是,它们不再直接从web.config中读取设置。相反,程序必须注册将修改现有内存中选项对象的回调函数。例如

services.AddMyService(options =>
    {
        options.setting = newValue;
    });

这对您的用户有一些好处。

  1. 它们不再局限于将配置值存储在库作者要求的位置。他们可以选择从数据库,配置服务,xml文件,json文件中加载配置,或者只是在应用程序中对其进行硬编码。但这使每个开发人员都能选择最适合自己系统的软件。
  2. 如果用户覆盖该软件包放入配置文件中的设置,并且该软件包的每次更新都覆盖了用户的首选项,则用户会感到恼怒,因为该软件包不尊重他们选择更改默认值的选择。
  3. 如果用户不想覆盖软件包放入配置文件中的设置,并且软件包作者不想在每次更新时覆盖配置文件,那么软件包作者很难更改默认值。

ASP.NET Core的新模型对每个人都更好,因为程序包作者创建了options对象,并使用默认值预填充了该对象,然后调用用户的委托方法,允许他们更改他们关心的设置。如果程序包作者想更改默认值,则可以在自己的代码中进行更改,然后发布新的程序包,并且不更改该值的用户将获得新的默认值,并且在其代码中明确设置该值的用户将继续使用从他们想要的任何配置存储中获得他们想要的价值。

因此,TL:DR的答案是您无法完成PackageReference项目所要求的工作,但我希望我的回答更长一点,可以使您了解如何重新设计库,从而更好地为软件包作者和软件包提供更好的支持为用户带来更好的体验。