我有一个奇怪的问题,msbuild如何使用VS2008 Web部署项目,并想知道为什么它似乎随机行为不端.
我需要从部署文件夹中删除一些应该只存在于我的开发环境中的文件.这些文件是在开发/测试期间由Web应用程序生成的,不包含在我的Visual Studio项目/解决方案中.
我使用的配置如下:
<!-- Partial extract from Microsoft Visual Studio 2008 Web Deployment Project -->
<ItemGroup>
<DeleteAfterBuild Include="$(OutputPath)data\errors\*.xml" /> <!-- Folder 1: 36 files -->
<DeleteAfterBuild Include="$(OutputPath)data\logos\*.*" /> <!-- Folder 2: 2 files -->
<DeleteAfterBuild Include="$(OutputPath)banners\*.*" /> <!-- Folder 3: 1 file -->
</ItemGroup>
<Target Name="AfterBuild">
<Message Text="------ AfterBuild process starting ------" Importance="high" />
<Delete Files="@(DeleteAfterBuild)">
<Output TaskParameter="DeletedFiles" PropertyName="deleted" />
</Delete>
<Message Text="DELETED FILES: $(deleted)" Importance="high" />
<Message Text="------ AfterBuild process complete ------" Importance="high" />
</Target>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我进行Web部署项目的构建/重建时,它"有时"会删除所有文件,但有时它不会删除任何内容!或者它将只删除DeleteAfterBuild项目组中三个文件夹中的一个或两个.在构建过程何时决定删除文件时,似乎没有一致性.
当我将配置编辑为仅包含文件夹1(例如)时,它会正确删除所有文件.然后添加文件夹2和3,它开始删除所有文件,如我所愿.然后,在随机时间看,我将重建项目,它不会删除任何文件! …
我想使用ELMAH记录一个异常(不将其一直抛出到调用堆栈中),并且它记录整个调用堆栈。
示例代码:
protected void Page_Load(object sender, EventArgs e)
{
DoSomething();
}
private void DoSomething()
{
try { TrySomething(); }
catch (Exception ex) { LogException(ex); }
}
private void TrySomething()
{
throw new NotImplementedException();
}
public static void LogException(Exception ex)
{
var currentStack = new System.Diagnostics.StackTrace(true);
Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
}
Run Code Online (Sandbox Code Playgroud)
现在,在LogException方法中,我可以看到调用堆栈告诉我名为TrySomething()的DoSomething(),并且引发了异常,但是我看不到调用堆栈显示了称为DoSomething()的Page_Load()。我希望能够看到完整的调用堆栈。
LogException方法内部的ex.StackTrace的示例:
at WebApplication1._Default.TrySomething() in C:\Projects\test\GeneralTests\WebApplication1\Default.aspx.cs:line 26
at WebApplication1._Default.DoSomething() in C:\Projects\test\GeneralTests\WebApplication1\Default.aspx.cs:line 20
Run Code Online (Sandbox Code Playgroud)
我可以从System.Diagnostics.StackTrace()获取完整的调用堆栈,例如:
at WebApplication1._Default.LogException(Exception ex)
at WebApplication1._Default.DoSomething()
at WebApplication1._Default.Page_Load(Object sender, EventArgs e)
[snip]
Run Code Online (Sandbox Code Playgroud)
(我可以通过遍历StackTrace的每一帧来获取行号和源文件详细信息)
但是,如何使用此调用堆栈详细信息将此注入异常或引发新异常?有没有一种优雅的方法可以做到这一点?我错过了真正明显的东西吗?