从我的 .csproj 文件中:
<Content Include="log4net.config">
<SubType>Designer</SubType>
</Content>
<Content Include="log4net.Release.config">
<DependentUpon>log4net.config</DependentUpon>
</Content>
<Content Include="log4net.Debug.config">
<DependentUpon>log4net.config</DependentUpon>
</Content>
<Content Include="log4net.Live.config">
<DependentUpon>log4net.config</DependentUpon>
</Content>
<Content Include="log4net.Demo.config">
<DependentUpon>log4net.config</DependentUpon>
</Content>
在我的 .csproj 文件的底部:
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="AfterCompile" Condition="exists('log4net.$(Configuration).config')">
<TransformXml Source="log4net.config"
Destination="$(IntermediateOutputPath)$(TargetFileName).config"
Transform="log4net.$(Configuration).config" />
<ItemGroup>
<AppConfigWithTargetPath Remove="log4net.config"/>
<AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>
来自 log4net.config
<connectionString name="ConnName"
value="Data Source=localhost\sqlexpress;Initial Catalog=localdb;Persist Security Info=True;Integrated Security=SSPI;" />
从 log4net.Live.config(删除敏感数据)
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionString name="ConnName" value="Data Source=127.0.0.1;Initial Catalog=DBName;Persist Security Info=True;User ID=userid;Password=pword"
providerName="System.Data.SqlClient" xdt:Transform="Replace" xdt:Locator="Match(name)" />
</configuration>
我检查了 msbuild 输出,发现它正确地转换了我的 web.config,但我没有看到它转换 log4net 的输出。此外,当我在发布后检查 log4net.config 文件时,它具有原始连接字符串。
我究竟做错了什么 :)?
谢谢!
更新
我在 msbuild 输出的代码中有一些错误,这些错误是我没有看到的警告。我修复了这些,现在我从 MSBuild 获得了一些输出:
AfterCompile:转换源文件:log4net.config 应用转换文件:log4net.Live.config 输出文件:obj\Live\Common.UI.Web.dll.config
转换成功
这仍然是一个问题,因为文件应该命名为log4net.config,而不是Common.UI.Web.dll.config...
无论出于何种原因
$(目标文件名)
采用 .csproj 文件名的名称。如果我只用 log4net 替换它,那么它会正确输出
更新
文件卡在 obj 文件夹中,发布时没有被拾取。