我无法获取自定义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