拦截.nuget转换安装/卸载

时间:2016-10-28 19:30:30

标签: visual-studio xslt nuget

类似问题:Renaming Web.config to run transforms breaks nuget package installation

我正在尝试将配置文件的构建转换与nuget一起使用。我有一个Web.Base.Config,Web.Debug.Config等

如果无法将nuget的目标更改为以Web.Base.Config为目标,而不是Web.Config,那么我想在nuget转换之前将Web.Base.Config复制到Web.Config并在转换后从Web.config复制回Web.Base.config。

有没有办法可以创建一个BeforeTarget AfterTarget任务来执行此操作?我不确定nuget中的目标是什么。

或者是否有另一种能够在开发机器上进行构建转换的解决方案?

编辑:

我发现我可以将Nuget.Core安装到我的项目中,并且在ProjectManager类中有一个名为PackageReferenceAdding的事件,如果我能弄清楚如何从UI界面以某种方式挂钩到<Copy SourceFiles="Web.Base.config" DestinationFiles="Web.config" />或类似的东西。

编辑2: 我找到了Nuget.VisualStudio(我不确定这是假设是由nuget中的项目调用还是安装nuget包的解决方案,我找不到太多信息)
并且如果在适当的时间触发它,那么认为下面的代码应该有效:

    private void CopyTask()
    {
        var componentModel = (IComponentModel)Package.GetGlobalService(typeof(SComponentModel));
        var installerServices = componentModel.GetService<IVsPackageInstallerEvents>();
        installerServices.PackageInstalling += metadata => {
            //Copy Web.Base.Config to Web.Config
        };
        installerServices.PackageInstalled += metadata =>
        {
            //Copy Web.Config to Web.Base.Config
        };
    }

1 个答案:

答案 0 :(得分:0)

创建项目并安装nuget时会生成到Web.config的nuget目标。它不是构建过程的目标。但是Transform操作在构建过程中运行,它将转换整个文件,而不是文件的一部分。所以我们无法将nuget的目标更改为Web.Base.Config。

另外,我们经常在packages.config文件中管理nuget包install / uninstall。在Web.config文件中,它只列出当前项目中使用的程序集。它们是两种不同的行为。