Visual studio 如何Nuget打包/转换多个web.config文件
我有一个Visual Studio 2019解决方案,看起来像这样,我想将其打包到nuget回购中:Visual studio 如何Nuget打包/转换多个web.config文件,visual-studio,nuget,nuget-package-restore,Visual Studio,Nuget,Nuget Package Restore,我有一个Visual Studio 2019解决方案,看起来像这样,我想将其打包到nuget回购中: -Solution +Project1 (no web.config file) +Project2 -web.config.transform <appSettings> <add key="Project2Key" value="p2value" /> </appSettings&g
-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>
-解决方案
+项目1
(没有web.config文件)
+项目2
-web.config.transform
+项目3
-web.config.transform
.....
+维护项目
-web.config.transform
编译时,它运行nuget-pack命令生成一个nuget包(一切正常)。
问题是只有MainUtilsProject中的web.config.transform被打包。其他web.config未被复制、覆盖或转换。在这些文件上设置“始终复制”
nuspec已经
<file src="web.config.transform" target="Content" />
在“文件”节点中
我知道它们都是相同的名称,并且中的最后一个将是生成后唯一存在的名称,但是如果我在其他项目中重命名web.configs,它们都会被复制到bin文件夹中,但是如果我尝试引用它们说“未找到文件”,则nuget pack命令将失败
最终目标是让下载nuget包的消费项目将web.config的相关部分安装到自己的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>
.....
有可能吗
谢谢
如何Nuget打包/转换多个web.config文件
我认为您应该首先将所有web.config文件合并到项目中的单个文件中,然后将新的单个web.config
文件打包到nuspec中,以满足您的要求
1)首先安装到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>
注意:如果使用PackageReference格式安装此软件包,则应使用来声明此文件。看
此外这些目标文件根据您的需求有一些逻辑,因此我提供的方法是针对您特定的项目文件结构的。当您说“将这些自定义目标添加到MainUtilProject”时,是该项目中的文件还是文件的一部分?此外,消费项目可以是packageReference或packageConfig,这有什么不同吗?上面的Scratch,找到了。该xml被添加到项目文件中。谢谢
<file src="web.new.finally.config.transform" target="Content" />