本地NuGet包Web.config转换仅在签出Web.config时有效

时间:2016-06-08 18:36:45

标签: visual-studio-2015 nuget nuget-package

我无法获取自定义NuGet包来进行Web.config转换。我有一个解决方案,其中包含2个不同的ASP.NET MVC Web项目,每个项目都有单独的Web.config文件。如果我将NuGet包安装到项目1中,一切都很好 - 部署包并使用Web.config.install.xdt转换Web.config。但是,如果我安装到项目2中,我的DLL将进入站点的bin目录,但Web.config转换不起作用。我正在使用Visual Studio 2015 Pro。我注意到,如果我,在NuGet包之前安装CHECK OUT Web.config文件,那么转换工作!这里发生了什么?为什么有必要在一个程序集中检出Web.config而不是另一个程序集?我已经通过Transformation Tester验证了转换是否正常工作:https://webconfigtransformationtester.apphb.com/,它再次适用于项目1,而不是项目2,除非我在安装之前检查Web.config。这不管它是否是全新安装(“Packages”文件夹中没有现有的包)。

我跟随NuGet尽可能接近转换,但没有骰子。 https://docs.nuget.org/create/creating-and-publishing-a-package

这是我的nuspec文件。我正在执行命令“nuget pack foo.csproj”以创建nupkg文件,而nupkg文件看起来对我来说。

<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <releaseNotes>Initial package created.</releaseNotes>
    <copyright>Copyright 2016</copyright>
  </metadata>
  <files>
      <file src="Content\Web.config.install.xdt" target="content" />
      <file src="Content\Web.config.uninstall.xdt" target="content" />
  </files>
</package>

编辑1:如果我使用执行Web.config检出的NuGet包中包含“Install.ps1”文件,那么Web.config转换似乎确实有效 即可。这是一个hacky不可靠的解决方法,似乎是NuGet安装中的一个错误,所以如果有人有修复,我很乐意看到它。这是我的hacky变通方法Install.ps1的内容,以防它可以帮助任何人:

# This script is a workaround for Web.config transformations not taking effect.  It simply checks out Web.config which seems to correct the issue.
param($installPath, $toolsPath, $package, $project)
$projectFullName = $project.FullName

# build a path to the web.config using a regex replacement of the .csproj or .vbproj file name with Web.config (assumes they're in the same directory) 
$webConfig = $project.FullName -replace "\\([\w\.\d]+).\w{2}proj$", '\Web.config'
& "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\tf.exe" checkout $webConfig /noprompt

0 个答案:

没有答案