首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何实现多个web.config文件的包/转换

如何实现多个web.config文件的包/转换
EN

Stack Overflow用户
提问于 2020-04-03 09:14:56
回答 1查看 343关注 0票数 0

我有一个类似于此的Visual 2019解决方案,我想将它打包到nuget回购系统中:

代码语言:javascript
运行
复制
-Solution
  +Project1
     (no web.config file)
  +Project2
    -web.config.transform
       <appSettings> 
           <add key="Project2Key" value="p2value" />
        </appSettings>
  +Project3
    -web.config.transform
       <appSettings> 
          <add key="Project3Key" value="p3value" />
        </appSettings>

        <customSettingsForProject3> 
          .....
        </customSettingsForProject3>
  +MainUtilsProject
    -web.config.transform
       <appSettings> 
           <add key="MainUtilsProjectKey" value="mainValue" />
        </appSettings>

当它编译时,它运行nuget命令来生成nuget包(这一切都很好)。问题是只有web.config.transform在MainUtilsProject中被打包。另一个web.configs要么没有复制、覆盖,要么没有转换。“复制始终”设置在这些文件上。

新英格兰人

代码语言:javascript
运行
复制
<file src="web.config.transform" target="Content" />

在文件节点中。

我知道它们都是相同的名称,最后一个名称将是构建之后唯一存在的名称,但是如果我在其他项目中重命名web.configs,它们都会被复制到bin文件夹中,但是如果我试图引用它们说“未找到文件”,则nuget pack命令将失败。

最终目标是让下载nuget包的消费项目将web.configs的相关部分安装到它自己的web.config中。这是完美的,但只适用于MainUtilsProject文件(在下面的示例中,它只有插入MainUtilsProject的键)

那么,如何将所有项目的web.configs合并到一个文件中,然后将其打包到nuget包中呢?请记住,这些项目也可以作为独立的项目存在,并拥有自己的web.configs。

在消费项目中,在安装nuget包之后,我希望在web.config文件中看到这一点:

代码语言:javascript
运行
复制
<appSettings> 
  <add key="Project2Key" value="p2value" />
  <add key="Project3Key" value="p3value" />
  <add key="MainUtilsProjectKey" value="mainValue" />
</appSettings>

<customSettingsForProject3> 
  .....
</customSettingsForProject3>

有可能吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-07 10:54:53

如何实现多个web.config文件的包/转换

我认为您应该首先将所有web.config文件合并到项目中的单个文件中,然后将这个新的单个web.config文件打包到符合您要求的nuspec中。

1)首先将MSBuildTasks nuget包装安装到MainUtilsProject中

2)将这些自定义目标添加到MainUtilsProject中,以便将这些web配置文件合并到新的单个文件中:

代码语言:javascript
运行
复制
<Target Name="merge1" BeforeTargets="Build">

    <XmlMassUpdate
               ContentFile="web.config.transform"
               ContentRoot="configuration"
               SubstitutionsFile="..\Project2\web.config.transform"
               SubstitutionsRoot="configuration/appSettings" 
               MergedFile="web.new1.config.transform"
            />
  </Target>

  <Target Name="merge2" AfterTargets="merge1">
    <XmlMassUpdate
           ContentFile="web.new1.config.transform"
           ContentRoot="configuration"
           SubstitutionsFile="..\Project3\web.config.transform"
           SubstitutionsRoot="configuration"
           MergedFile="web.new2.config.transform"
            />
    <Delete Files="web.new1.config.transform"></Delete>

  </Target>
  <Target Name="merge3" AfterTargets="merge2">
    <XmlMassUpdate
           ContentFile="web.new2.config.transform"
           ContentRoot="configuration/appSettings"
           SubstitutionsFile="App.config.transform"
           SubstitutionsRoot="configuration"
           MergedFile="web.new.finally.config.transform"
            />
    <Delete Files="web.new2.config.transform"></Delete>

  </Target>

3)然后web.new.finally.config.transform打包到nuspec文件中。

代码语言:javascript
运行
复制
<file src="web.new.finally.config.transform" target="Content" />

注意事项:如果您使用PackageReference格式来安装这个包,您应该使用内容文件节点来声明这个文件。见本期

除了之外,这些目标文件有一些基于您的需求的逻辑,所以我提供的方法是特定于您特定的项目文件结构的。

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

https://stackoverflow.com/questions/61008587

复制
相关文章

相似问题

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