显然,许多应用程序需要处理文件并向用户显示错误.然而,System.IO.File类的成员抛出了很多例外.这些仅适用于ReadAllText:
那么如何抓住它们并将其显示给用户而不会吞下其他异常?
显然,通过完美的编码,您可以消除这些2:
如果你写了一个(可能是痛苦的)检查,你可以消除PathTooLongException.但是为什么要复制用于检查Microsoft编写的代码?
但即使您进行了所有检查,其他例外仍然可能发生:
打开文件时可以删除文件和文件夹,安全权限可以更改等.
除了向用户显示消息之外,我没有看到您在这些场景中可以做什么.你要找到操作系统找不到的目录吗?修复权限?将代码注入操作系统以支持不支持的操作?大声笑我所看到的可能是显示错误信息.
因此,如果每次打开文件读取文本时都必须捕获所有这些异常,那么我的代码必须很长且重复,除非我通过捕获异常来吞下异常.
创建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) 我正在处理的应用程序需要处理具有很长文件/路径名的文件.这是一个.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++创建了一个dll.现在我正试图从C#中使用它.我已将Object添加到项目引用中.对象浏览器在dll中正确显示对象,对象浏览器中dll的路径对应于实际路径.
但是,当我运行C#程序时,它会抱怨:
未处理的异常:System.IO.FileNotFoundException:找不到指定的模块.(来自HRESULT的异常:0x8007007E)
知道还有什么必须做的吗?
谢谢.
问题:我有一个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的位置,我将解决参考问题.我肯定不知道.有人知道我应该怎么做来解决这个问题吗?
我们在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服务器?...我们自己的解决方案失败了 - 是否有可能让微软打开一张支持票,并了解我们的应用程序正在进行的工作 - 如何解决这个问题?
提前致谢.
宜兰
我有一个IQueryable对象,我想手动更新一些值,但是执行循环后,更改不会反映出来:
IQueryable<myModel> items;
items = GetItems();
foreach (myModel row in items)
{
row.field10 = "new value";
}
objDataContext.SubmitChanges();
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
例如,我想以特定的时间间隔(每小时或每日任务)调用一个函数.
我已经在使用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)
我希望,我可以解释这个问题.谢谢.
使用这篇文章发布在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="{"Regions":[{"RegionName":"Mid Atlantic USA","RegionId":2},{"RegionName":"Mid West USA","RegionId":10},{"RegionName":"North Central USA","RegionId":5},{"RegionName":"North East USA","RegionId":1},{"RegionName":"North West USA","RegionId":7},{"RegionName":"Other","RegionId":9},{"RegionName":"South Central USA","RegionId":6},{"RegionName":"South East USA","RegionId":3},{"RegionName":"South West USA","RegionId":8}],"SelectedRegion":{"RegionName":"North Central USA","RegionId":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.observable和ko.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) 我一直在试图找出为什么返回格式为下拉列表的美国国家列表的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) 我们的 SQL Server 数据库表中有一个由 SQL Server 自动生成的字段,该字段称为CreatedTime.
我们已将整个数据库表映射到实体框架中的数据模型,因此也将字段CreatedTime.
当我们通过实体框架在数据库中插入新行时,我们不会为 提供任何值CreatedTime。
这会导致插入失败并显示错误:
SqlDateTime 溢出。必须在 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间
所以问题是:有没有办法在实体框架插入语句中排除实体数据模型中的特定字段?这样我们就不会得到上面的错误?
我们希望将字段保留CreatedTime在实体模型中,因为我们可能想稍后访问它。
c# ×6
.net ×5
asp.net-mvc ×2
linq ×2
asp.net ×1
azure ×1
c#-4.0 ×1
c++ ×1
controls ×1
file ×1
javascript ×1
knockout.js ×1
linq-to-sql ×1
managed ×1
registry ×1
sql ×1
structuremap ×1
timer ×1
webforms ×1
windows ×1
winforms ×1