我正在使用Visual Studio2017。我继承了一个Web项目,并试图为config转换引入构建配置。我发现奇怪的是,无论我选择哪种构建配置,该项目始终会编译到bin \目录,而不会为该构建选择子目录。
更奇怪的是,我创建了两个新的Web项目,以发现问题可能出在哪里并得到不同的结果。一个是.Net Core Web项目,在这些构建配置下进行编译时,确实创建了Debug和Release目录。另一个与继承的项目一样,是一个.Net Framework Web项目,它也只能编译到bin \目录。
有人知道发生了什么吗?
答案 0 :(得分:0)
虽然我没有发现为什么在构建过程中未将配置名称未自动附加到输出路径,也没有发现为什么未将转换应用于配置文件,但我还是通过黑客入侵了项目文件来解决了这个问题。
对于每个标识要用于构建的设置的PropertyGroup节点,我将OutputPath值从bin \更改为bin \ $(配置)。
然后,将以下内容插入到Project节点中,以使转换生效:
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterCompile" Condition="Exists('Web.$(Configuration).config')">
<TransformXml Source="Web.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="Web.$(Configuration).config" />
<ItemGroup>
<AppConfigWithTargetPath Remove="Web.config" />
<AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>