我有一个类似于此的Visual 2019解决方案,我想将它打包到nuget回购系统中:
-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要么没有复制、覆盖,要么没有转换。“复制始终”设置在这些文件上。
新英格兰人
<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文件中看到这一点:
<appSettings>
<add key="Project2Key" value="p2value" />
<add key="Project3Key" value="p3value" />
<add key="MainUtilsProjectKey" value="mainValue" />
</appSettings>
<customSettingsForProject3>
.....
</customSettingsForProject3>
有可能吗?
谢谢
发布于 2020-04-07 10:54:53
如何实现多个web.config文件的包/转换
我认为您应该首先将所有web.config文件合并到项目中的单个文件中,然后将这个新的单个web.config
文件打包到符合您要求的nuspec中。
1)首先将MSBuildTasks nuget包装安装到MainUtilsProject中
2)将这些自定义目标添加到MainUtilsProject中,以便将这些web配置文件合并到新的单个文件中:
<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文件中。
<file src="web.new.finally.config.transform" target="Content" />
注意事项:如果您使用PackageReference格式来安装这个包,您应该使用内容文件节点来声明这个文件。见本期。
除了之外,这些目标文件有一些基于您的需求的逻辑,所以我提供的方法是特定于您特定的项目文件结构的。
https://stackoverflow.com/questions/61008587
复制相似问题