小编Dil*_*ave的帖子

保存从模板生成的OpenXML文档(Word)

我有一些代码将打开Word 2007(docx)文档并更新相应的CustomXmlPart(因此,当它们映射到CustomXmlPart时更新文档本身的内容控件)但无法解决如何将其保存为一个新文件.当然不会那么难!

我目前的想法是,我需要打开模板并将内容复制到一个新的空白文档中 - 逐个文件,在遇到它时更新CustomXmlPart.叫我老式,但听起来有点笨重!

为什么我不能只做一个WordprocessingDocument.SaveAs(filename); ...?

请告诉我,我在这里缺少一些简单的东西.

提前致谢

c# ms-word openxml

10
推荐指数
1
解决办法
2万
查看次数

抑制NAnt删除任务的日志输出

我们目前正在使用CruiseControl.NET和NAnt 0.85构建脚本,虽然一切运行良好,但日志文件对我来说有点过于冗长.

特别是,当使用<delete>任务删除文件夹时,我总是[delete] Deleting directory在日志中获得一个条目.

足够公平,但这个任务是在一个foreach循环中运行并导致一个很长的条目列表(特别是如果文件夹包含文件 - 报告每个删除)这只是使日志混乱并使其难以阅读而无需无休止的滚动.我已经添加了许多<echo>任务来报告脚本进度,所以不需要所有这些'绒毛'.

我已经verbose="false"<delete>任务上使用了该属性,并且在此过程中压缩了文件删除消息(这提高了日志可读性无止境),仍然会报告文件夹删除.我尝试过使用该verbose属性,foreach但这没有任何区别.

有谁知道我怎么可以压制这些消息或我坚持他们..?

cruisecontrol.net nant logging

9
推荐指数
1
解决办法
1032
查看次数

C#中的常规异常处理

我正在通过FxCop运行一些代码,目前正在考虑清除所有非破坏性违规.

代码本身有一些try/catch块实例,它们只捕获一般异常;

try
{
    // Some code in here that could throw an exception
}
catch(Exception ex)
{
    // Exception Thrown ... sort it out!
}
Run Code Online (Sandbox Code Playgroud)

现在我们都知道这是不好的做法,但我认为我知道如何正确地做到这一点 - 但FxCop还有其他想法!

假设try块中的代码可能抛出IO异常 - 并且只有IO异常.这样做应该没有错:

try
{
    // Code in here that can only throw an IOException
}
catch (System.IO.IOException ioExp)
{
    // Handle the IO exception or throw it
}
catch (System.Exception ex)
{
    // Catch otherwise unhandled exception
}
Run Code Online (Sandbox Code Playgroud)

但是FxCop不同意我的观点......它仍然将此标记为违规,因为我正在追赶System.Exception.

这是非常糟糕的做法还是应该/我能否安全地忽略这种违规行为?

c# exception-handling

7
推荐指数
2
解决办法
1万
查看次数

Viewstate压缩问题

我目前正在与.NET Viewstate斗争,它开始让我失望.我们发现其中一个应用程序中的某些页面由大约80%的viewstate组成,我已经考虑尽可能地减少这一点.

我已经看过(并且很满意)禁用viewstate以获取不需要它的控件(标签,按钮等)并在这里取得了一些小的收益.

我现在正在查看视图状态压缩,虽然我可以证明大小减少了40-50%,但它似乎并不适合我的应用程序.

场景:页面包含一些下拉列表,一个按钮和一个Grdiview(因此需要处理ViewState!).页面加载时,将填充DDL并进行默认选择.按OK按钮将导致Gridview按预期填充.

现在的问题是:启用Viewstate压缩后,如果用户在单击"确定"按钮之前更改了DDL中的选定项目,则会收到"必填字段验证程序"错误,指示尚未在其中一个DDL中进行选择 - 但是事实并非如此!禁用压缩代码可以解决问题,并且页面按预期运行(即,它已经持续数月!).

问题可能归结为现在存储在__VIEWSTATE以外的密钥中的视图状态[我见过的代码使用了不同的密钥名称 - 例如VSTATE).

我的页面来源看起来像这样;

带压缩的页面源(请注意空的__VIEWSTATE键):

<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__VSTATE" id="__VSTATE" value="H4sIAAAAAEAO29B2AcSZYlJ
.
.
MKd2afqdaImFR5UiFXVyQPwLPA//8xt+pMsSQ8vlOklcoNgmZfJd8hHvk6/S/7UbxxAJTjzZfp6Qcm039
h3d3dvvPO7/Oa/7i57uemj1H2a/gw5lJQ+ySjFRtPZUL7A/3o2ImFR5UiFXVyLPA+38At70F1EkwAAA=" />
<input type="hidden" name="__VIEWSTATE" id="
__VIEWSTATE" value="" />
</div>
Run Code Online (Sandbox Code Playgroud)

没有压缩的页面源:

<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__LASTFOCUS" id="__LASTFOCUS" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTYxOTM1NDg4N
A9kFgJmD2QWAgIDD2QWAgIFD2QWAmYPZBYKAgEPZBYIAgcPZBYCAgMPDxYCHgRUZXh0BRdEYXduQyBbY2hhbm
dlIHBhc3N3b3JkXWRkAgkPFgIeB1Zpc2libGVoFgQCAQ8PFgIfAAUFQWRtaW5kZAIDDw8WAh8ABQUxNDoyNGR
.
.
. …
Run Code Online (Sandbox Code Playgroud)

compression asp.net viewstate

5
推荐指数
1
解决办法
4101
查看次数

针对填充列表的C#foreach返回null

在进行了一些重大的重构(转向PCL)之后,我有一些代码(它不是重构的一部分)运行正常,但现在抛出了异常.

该代码是Xamarin Android项目的一部分,该项目在移动到可移植类库之前使用文件链接.

这是一件简单的事情,但我不明白为什么会这样

foreach(var station in stationList)
{

    // Breakpoint on next line shows station to be null..!
    if(station.ClusterId != Guid.Empty)
    {
        // Code in here
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是虽然stationList包含许多StationViewModel对象,但station实例总是为空 - 这怎么可能呢?

我曾尝试更换foreach一个for循环,但结果却是相同的- station为空.

我还重新启动了Visual Studio并重新启动.

没有Xamarin更新似乎很出色.

代码运行正常,生成stationList并没有改变,也没有这个类的实现.

编辑:stationList创建过程是:

  1. 在PCL中调用SQLite'repo'返回(已填充)IList<station>

    _loadedStations = await _stationManager.GetStationsAsync();

  2. 使用AutoMapper 从上面的列表生成一个新的(正确填充)List<StationViewModel>

    fullStationList = AutoMapper.Mapper.Map<IList<Station>, IList<StationViewModel>>(_loadedStations);

  3. 在单独的方法中,上面的视图模型列表基于LatLng坐标进行过滤.

    var stationList = fullStationList.Where(x => mapBounds.Contains(new LatLng(x.Latitude, …

c# foreach xamarin.android

5
推荐指数
1
解决办法
788
查看次数

表单身份验证何时不应超时?

我有一个ASP.NET应用程序的问题,这让我疯了.

当用户使页面处于非活动状态一段时间时,会话超时并且由于会话变量无法解析而引发错误(我将错误地捕获此信息,但这不是问题).我编写了一个'defribulator',它将在会话超时的一半到期后执行不可见的回发,这似乎工作正常 - 即使会话超时设置为20分钟,应用程序停留30分钟也不会导致错误.然而,今天早上其他开发者之一经历了超时 - 这怎么可能?

在进一步调查时,我认为当超出表单身份验证超时时会出现问题 - 即使defribulator已经(显然)保持会话处于活动状态.我已经读过,如果在指定的超时时间的一半之后发生回发,则只会重新发出身份验证票据,这不是问题,因为defrib将在超时期间的后半段发出请求 - 所以为什么是它没有重新发行?

我想我可以通过将身份验证超时设置为8小时左右来解决问题,但这是一个糟糕的修复.

任何人都可以对此有所了解吗?

提前致谢

[编辑24/11/2008]审查日志文件已经证明具有启发性和令人困惑.我可以看到defribulator在10分钟不活动后触发,但是当Session_Id似乎始终是合理的时,表单身份验证票证ID会发生变化 - 不确定是否应该.我现在正在制定测试计划,并在完成测试计划后回复.感谢迄今为止提供反馈的所有人.

[编辑24/11/2008]好吧我很难过 - 现在看来工作正常!当defrib运行(ID更改)并且正在维护会话时,将重新生成身份验证票证.这是服务器问题 - 无法分辨.我以前经历过这个问题,从来没有深究过这个问题而且非常令人沮丧 - 当然不应该这么困难.我将不得不放弃这个时间,因为我必须继续应用程序的其他方面.我只需围绕这个问题编写代码 - 这可能永远不会发生在客户网站上.

再次感谢每个人的意见 - 如果我取得任何进展,我会将其发回这里.

asp.net session forms-authentication

4
推荐指数
1
解决办法
1992
查看次数

Global.asax没有为Release版本触发

我们的一个应用程序有一个机制,可以在遇到特定级别的异常时自动通过电子邮件发送帮助台.一个特殊的例外,一个NullReferenceException,导致一些问题,我相信它是由IIS回收和丢失会话引起的.为了证明这一点,我想在应用程序启动/停止/回收时记录,并在global.asax文件中添加了一些代码来执行此操作.在调试模式下运行时,日志消息被写出并且一切都很好.当我切换到Release build时会出现问题,它会触发Web部署项目构建到IIS中配置的文件夹.

当我导航到应用程序时,未调用ApplicationStart方法,因为未创建日志文件且未更新事件日志.当我重新启动IIS时,ApplicationEnd也会发生同样的情况,即不会创建日志.

为什么它适用于Debug版本而不适用于Release版本?我一直在踢这几个小时,这让我疯了.

提前致谢

**[编辑]:我不是100%确定发生了什么,但它现在似乎正在发挥作用.我想也许我们用于日志记录的程序集可能在ApplicationStart执行时没有加载,所以我删除了所有代码,只是在方法中创建了一个文本文件.看哪,文件已经创建了!所以我添加了一个if(logger!= null)类型检查以尝试输出一些诊断但没有写出任何内容.所以我尝试了一个try/catch并写了一个空白文件"exception.txt",如果抛出异常但仍然没有创建文件 - 尽管生成了事件日志和预期的日志文件!我糊涂了!**

asp.net global-asax

4
推荐指数
3
解决办法
6362
查看次数

为什么这段代码在VS2005中编译而不是VS2008(VB.NET)

我正在将VB.NET Web应用程序从Visual Studio 2005(.NET 2.0)迁移到Visual Studio 2008(.NET 3.5),虽然它很简单但我遇到了一个需要一些时间来解决的问题.

有问题的代码如下:

Dim serviceArray = New SecurityLayer.Model.Service()
serviceArray = new SecurityLayer.SecurityBusinessController.GetServices(userId)
Run Code Online (Sandbox Code Playgroud)

哪个在VS2005/.NET2.0中编译但在VS2008/.NET3.5中失败,并出现以下错误:

"SecurityLayer.Model.Service的1维数组"类型的值无法转换为"SecurityLayer.Model.Service"

这表明serviceArray未声明为数组,并且在阅读MSDN文档时,它看起来不像版本之间的语法有所改变,但它声明无论是否传入任何值,都需要花括号.果然,在它的声明中添加花括号可以解决问题(编译器移动到下一个实例!).

Dim serviceArray = New SecurityLayer.Model.Service(){}
serviceArray = new SecurityLayer.SecurityBusinessController.GetServices(userId)
Run Code Online (Sandbox Code Playgroud)

更新此声明的所有实例后,代码现在构建并按预期运行.

Option Explicit和Option Strict在两个IDE中是相同的,所以它不能是那个(或者至少是我假设的).

所以我的问题是,为什么这个构建在VS2005/.NET2.0而不是VS2008/.NET3.5中?

提前致谢

vb.net syntax visual-studio-2005 visual-studio-2008

3
推荐指数
1
解决办法
267
查看次数

Xamarin Android - 从 Dimension 文件设置 TextSize

我有一个 Xamarin Android 项目,我使用尺寸文件为不同的屏幕尺寸/分辨率指定文本大小、填充、边距等。

我注意到直接在布局内和在代码内设置值之间存在显着差异。

例如,如果我将以下内容添加到 TextView 布局 XML

android:textSize="@dimen/nav_tile_text_size"

那么我希望结果与在代码中执行此操作相同

myTextView.SetTextSize(ComplexUnitType.Sp, _context.Resources.GetDimension(Resource.Dimension.nav_tile_text_size))

维度文件包含以下内容:

<dimen name="nav_tile_text_size">17sp</dimen>

但生成的 UI 显示未正确应用大小

模拟器截图

我在这里错过了什么?

android xamarin.android

3
推荐指数
1
解决办法
3272
查看次数