小编Rui*_*mba的帖子

C# - 这是一种简化System.IO.File.ReadAllText生成的异常的好方法

显然,许多应用程序需要处理文件并向用户显示错误.然而,System.IO.File类的成员抛出了很多例外.这些仅适用于ReadAllText:

  • ArgumentException的
  • ArgumentNullException
  • PathTooLongException
  • DirectoryNotFoundException
  • IOException异常
  • UnauthorizedAccessException
  • FileNotFoundException异常
  • NotSupportedException异常
  • 抛出:SecurityException

那么如何抓住它们并将其显示给用户而不会吞下其他异常?

显然,通过完美的编码,您可以消除这些2:

  • ArgumentException的
  • ArgumentNullException

如果你写了一个(可能是痛苦的)检查,你可以消除PathTooLongException.但是为什么要复制用于检查Microsoft编写的代码?

但即使您进行了所有检查,其他例外仍然可能发生:

  • DirectoryNotFoundException
  • IOException异常
  • UnauthorizedAccessException
  • FileNotFoundException异常
  • NotSupportedException异常
  • 抛出:SecurityException

打开文件时可以删除文件和文件夹,安全权限可以更改等.

除了向用户显示消息之外,我没有看到您在这些场景中可以做什么.你要找到操作系统找不到的目录吗?修复权限?将代码注入操作系统以支持不支持的操作?大声笑我所看到的可能是显示错误信息.

因此,如果每次打开文件读取文本时都必须捕获所有这些异常,那么我的代码必须很长且重复,除非我通过捕获异常来吞下异常.

创建FileException并捕获在实际处理文件时可能出现的所有异常是一种好习惯吗?我的想法是:

public class FileException : Exception
{
    public FileException( Exception e )
        : base( e.Message, e.InnerException )
    {
    }
}

public static class FileNoBS
{
    public static string ReadAllText2( string path )
    {
        try
        {
            return File.ReadAllText( path );
        }
        catch ( ArgumentNullException e )
        {
            throw new FileException( e );
        }
        catch …
Run Code Online (Sandbox Code Playgroud)

c# exception-handling

6
推荐指数
1
解决办法
2323
查看次数

长路径\\?\ workaround无法处理某些安装

我正在处理的应用程序需要处理具有很长文件/路径名的文件.这是一个.Net 4.6应用程序,所以我实现了4.6.2之前的解决方法,以允许此处此处概述的\\?\语法.

这是我用来启用该功能的代码(我无法修改app.config,因此必须在代码中设置):

var type = Type.GetType("System.AppContext");
if (type != null)
{
    AppContext.SetSwitch("Switch.System.IO.UseLegacyPathHandling", false);
    AppContext.SetSwitch("Switch.System.IO.BlockLongPaths", false);

    var switchType = Type.GetType("System.AppContextSwitches");
    if (switchType != null)
    {
        // We also have to reach into System.AppContextSwitches and manually update the cached private versions of these properties (don't ask me why):

        var legacyField = switchType.GetField("_useLegacyPathHandling", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
        legacyField?.SetValue(null, (Int32)(-1)); // <- caching uses 0 to indicate no value, -1 for false, 1 for true.

        var blockingField = switchType.GetField("_blockLongPaths", System.Reflection.BindingFlags.Static …
Run Code Online (Sandbox Code Playgroud)

c# windows registry file file-handling

6
推荐指数
1
解决办法
126
查看次数

使用C#中的托管C++ dll

我使用托管C++创建了一个dll.现在我正试图从C#中使用它.我已将Object添加到项目引用中.对象浏览器在dll中正确显示对象,对象浏览器中dll的路径对应于实际路径.

但是,当我运行C#程序时,它会抱怨:

未处理的异常:System.IO.FileNotFoundException:找不到指定的模块.(来自HRESULT的异常:0x8007007E)

知道还有什么必须做的吗?

谢谢.

.net c# c++ managed

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

由于未解析的依赖项,无法使用Winforms控件

问题:我有一个WinForms控件('MyControl')依赖于myCli.dll,这是一个用C++ CLI编写的DLL.该组件是第三方(由另一个团队编写).myCli.dll依赖于myLibrary.dll,这是由另一方编写的.该控件存在于myAssembly.dll中,这是一个C#控件和资源库.

当myCli.dll没有对myLibrary.dll的依赖时,我的控件运行得很好.我可以将它添加到表单,构建它,等等.但myCli.dll的新版本问世,我重新反对它.突然,IDE表现得很糟糕.关键问题似乎是IDE无法解析myLibrary.dll上的myCli.dll依赖关系.

当我尝试将控件从工具箱拖到设计图面时,我收到错误:

"Failed to create component 'MyControl'.  
Run Code Online (Sandbox Code Playgroud)

错误消息如下:

'System.IO.FileNotFoundException: Could not load file or assembly 'myCli.dll, Version 0.0.0.0, Culture=neutral, PublicKeyToken=2fb8da784abc560a' or one of its dependencies. 
The system cannot find the file specified"
Run Code Online (Sandbox Code Playgroud)

我的信念是,如果我能弄清楚myLibrary.dll的位置,我将解决参考问题.我肯定不知道.有人知道我应该怎么做来解决这个问题吗?

.net c# user-controls controls winforms

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

SQL Azure:更多间歇性超时

我们在Windows Azure和SQL Azure上运行了一组5个在线拍卖系统.每个系统由一个Web工作者和一个或多个Web角色组成.每个系统都使用ASP.NET MVC 3和Entity Framework,Repository Pattern和StructureMap.

工作者角色负责管理并运行两组流程.一组每十秒运行一次,另一组每秒运行一次.每个进程都可能运行数据库查询或存储过程.这些都是使用Quartz.net安排的

Web角色服务于公共接口和后台.在其他基本的crud功能中,这两者都提供了屏幕,当打开时,它们将重复调用控制器方法,这将导致执行存储过程只读查询.每个客户重复的频率约为2-3秒.一个典型的用例是打开5个后台办公室窗口,打开25个最终用户窗口 - 所有窗口都反复点击系统.

很长一段时间以来,我们一直遇到间歇性的SQL超时错误.其中三个最常见的是:

System.Data.SqlClient.SqlException:从服务器接收结果时发生传输级错误.(提供程序:TCP提供程序,错误:0 - 远程主机强制关闭现有连接.)

System.Data.SqlClient.SqlException:从服务器接收结果时发生传输级错误.(提供者:TCP提供者,错误:0 - 信号量超时期限已过期.)

System.Data.SqlClient.SqlException:超时已过期.操作完成之前经过的超时时间或服务器没有响应.

唯一可预测的情况是在拍卖期间,特定控制器 - > sproc在事件期间开始超时(可能是由于负载).所有其他时间错误似乎是完全随机的,即使在用户不活动期间也会出现单个,两个和三个等.例如,系统将在没有错误的情况下运行18个小时,然后可能是来自不同管理方法的5-10个错误,或者可能是用户登录并查看其帐户.

其他信息:

我尝试使用本地SSMS和Azure基于Web的查询工具在SQL Azure上运行受影响的查询/ sprocs - 所有似乎都快速执行,最多1秒.查询计划没有显示任何过于可疑的事情,虽然我绝不是SQL查询性能专家,或任何其他类型的专家J

我们已将所有受影响的区域包装在Azure SQL Transient Fault Handling Blocks中 - 但正如此处所讨论的那样http://social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/7a50985d-92c2-472f-9464-a6591efec4b3,他们没有抓住超时,根据"Valery M",这是有充分理由的.

虽然asp.net成员资格信息存储在数据库中,但我们不会在数据库中存储任何会话信息.

我们使用1个"SQL Azure服务器实例",它承载所有5个数据库,两个用于登台,三个用于生产.所有5个系统通常同时处于活动状态,尽管在任何给定时间不可能有多个系统处于活动负载状态.所有Web角色,辅助角色和SQL Azure服务器都位于同一Azure地理区域中.

关于我们应该在哪里寻找的任何想法?它是否有助于为每个系统提供自己的SQL Azure服务器?...我们自己的解决方案失败了 - 是否有可能让微软打开一张支持票,并了解我们的应用程序正在进行的工作 - 如何解决这个问题?

提前致谢.

宜兰

sql structuremap asp.net-mvc entity-framework azure

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

更新IQueryable对象中的值

我有一个IQueryable对象,我想手动更新一些值,但是执行循环后,更改不会反映出来:

 IQueryable<myModel> items;
 items = GetItems();   

 foreach (myModel row in items)
 {
        row.field10 = "new value";
 }

 objDataContext.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

.net c# linq linq-to-sql

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

特定时间间隔内的重复性任务?

例如,我想以特定的时间间隔(每小时或每日任务)调用一个函数.

我已经在使用Timer了.但只要我的本地服务器正常工作,它就能工作.例如:

public static void StartYahooWeatherManager()
{
    Timer t = new Timer(1000 * 60 * 60 * 6  /* 6 hours */);
    t.Elapsed += new ElapsedEventHandler(WriteYahoWeatherRssItemToDb);
    t.Start();
}

private static void WriteYahoWeatherRssItemToDb(object o, ElapsedEventArgs e)
{
    YahooWeatherManager.InsertYahooWeatherRssItem(YahooWeatherManager.GetYahooWeatherRssItem());
}
Run Code Online (Sandbox Code Playgroud)

我以6小时为间隔向db发送天气信息.项目已经在主持人.只要我的计算机本地服务器正在运行,Timer事件就会起作用.

题:

我的代码有什么问题?(或者在WebProject中使用计时器的逻辑错误?)为什么计时器只在本地服务器工作时工作?

管理时间间隔任务的最佳方法是什么?(不需要asp.net)

我希望,我可以解释这个问题.谢谢.

.net c# asp.net-mvc timer scheduled-tasks

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

在ASP.NET WebForms服务器端帖子之间坚持淘汰ViewModel ...

使用这篇文章发布在CodeProject.com上," 在ASP.NET应用程序中使用KnockoutJS "作为指南我试图使用ASP.NET 3.5 Web窗体创建一个可重用的,数据加载的下拉列表,但是它利用KnockoutJS作为客户端数据绑定.此下拉列表的多个独立实例应该能够在同一页面中独立存在.

到目前为止,CodeProject.com帖子在指导我如何进行设置方面非常有价值,并且我成功地将更新后的ViewModel数据作为JSON字符串在服务器和客户端之间来回传递,并将其转换为对象(以及从对象转换)在服务器和客户端上).我所依赖的是应该是简单的部分; 将ViewModel绑定到下拉列表!

所以我首先将JSON字符串加载到隐藏字段中.它包括一个区域列表和一个SelectedRegion.

<input type="hidden" id="ddlRegionKO_hdnRegionListVMStorage" value="{&quot;Regions&quot;:[{&quot;RegionName&quot;:&quot;Mid Atlantic USA&quot;,&quot;RegionId&quot;:2},{&quot;RegionName&quot;:&quot;Mid West USA&quot;,&quot;RegionId&quot;:10},{&quot;RegionName&quot;:&quot;North Central USA&quot;,&quot;RegionId&quot;:5},{&quot;RegionName&quot;:&quot;North East USA&quot;,&quot;RegionId&quot;:1},{&quot;RegionName&quot;:&quot;North West USA&quot;,&quot;RegionId&quot;:7},{&quot;RegionName&quot;:&quot;Other&quot;,&quot;RegionId&quot;:9},{&quot;RegionName&quot;:&quot;South Central USA&quot;,&quot;RegionId&quot;:6},{&quot;RegionName&quot;:&quot;South East USA&quot;,&quot;RegionId&quot;:3},{&quot;RegionName&quot;:&quot;South West USA&quot;,&quot;RegionId&quot;:8}],&quot;SelectedRegion&quot;:{&quot;RegionName&quot;:&quot;North Central USA&quot;,&quot;RegionId&quot;:5}}" />
Run Code Online (Sandbox Code Playgroud)

然后我使用该ko.utils.parseJson()函数将此字符串转换为Javascript对象.

var stringViewModel = document.getElementById("ddlRegionKO_hdnRegionListVMStorage").value;
var ddlRegionKO_pnlRegionDDLContainer_ViewModel = ko.utils.parseJson(stringViewModel);
Run Code Online (Sandbox Code Playgroud)

然后,我转换属性定义成ko.observableko.observableArray方法(这是将要进行重构的部分之一,但作为一个概念证明就足够了).

//
// Convert all the model properties to KO Propety/Methods
for (var propertyName in ddlRegionKO_pnlRegionDDLContainer_ViewModel) {
    switch(propertyName.toUpperCase())
    {
        //
        // Multiple Region objects are stored as an array in the regions property.
        case …
Run Code Online (Sandbox Code Playgroud)

javascript asp.net webforms knockout.js

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

无法转换WhereSelectListIterator类型的对象

我一直在试图找出为什么返回格式为下拉列表的美国国家列表的Linq查询在代码返回到调用方法时不会强制转换为List.我得到的错误是:

无法将类型为'WhereSelectListIterator'2 [StateListing.States,<> f__AnonymousTypea'2 [System.String,System.String]]'的对象强制转换为'System.Collections.Generic.List`1 [StateListing.States]'

来自错误的名称空间StateListing是一个dll库,它有一个名为States的类,它返回一个IEnumerable状态列表,如下所示.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StateListing
{
    public class States 
    {
        public string StateAbbriviation { get; set; }
        public int StateID { get; set; }
        public string StateName { get; set; }
        static int cnt = 0;

        public static IEnumerable<States> GetStates()
        {
            return new List<States>
            {
                new States
                {
                    StateAbbriviation = "AL",
                    StateID=cnt++,   
                    StateName = "Alabama"
                },
                new States
                {
                    StateAbbriviation = "AL",
                    StateID=cnt++,
                    StateName = "Alaska"
                }

                //Continued …
Run Code Online (Sandbox Code Playgroud)

linq c#-4.0 asp.net-mvc-3

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

如何在插入时忽略实体模型中的特定字段?

我们的 SQL Server 数据库表中有一个由 SQL Server 自动生成的字段,该字段称为CreatedTime.

我们已将整个数据库表映射到实体框架中的数据模型,因此也将字段CreatedTime.

当我们通过实体框架在数据库中插入新行时,我们不会为 提供任何值CreatedTime

这会导致插入失败并显示错误:

SqlDateTime 溢出。必须在 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间

所以问题是:有没有办法在实体框架插入语句中排除实体数据模型中的特定字段?这样我们就不会得到上面的错误?

我们希望将字段保留CreatedTime在实体模型中,因为我们可能想稍后访问它。

.net entity-framework

5
推荐指数
2
解决办法
7928
查看次数