大的主观问题:我经常发现自己使用LINQ来过滤一组对象,然后在查询之后,做一个旧式的foreach来对每个结果执行一个动作.有没有一种很好的方法来组合这两个任务,以便对每个与Where()谓词匹配的对象执行操作?几乎就像将一个Action传递给Select().这可能不会编译,但是如果传入一个返回bool的Func,那么你可以将其嵌入另一个可以对失败或成功做某事的查询中.有人在生产代码中做过这个吗?这会被视为不良做法吗?还有其他想法吗?
我在一个胖客户端应用程序上工作,该应用程序经常遇到访问网络共享的"问题".在使用服务器执行任何IO之前,我的应用程序会测试共享(通常是形式为\\ server\share $)是否存在.这适用于检测客户端已失去与服务器的连接的那些场景,但仍存在隐藏共享存在但用户无权从共享内部读取的奇怪场景.有人可以分享(没有双关语)测试当前用户是否可以读取共享文件所需的C#代码吗?我应该查询共享的ACL还是共享中的文件?如果份额是空的怎么办?如果用户是混合环境中的本地非管理员(XP Pro工作站,Novell网络上没有域的Windows 2003服务器),该怎么办?
为"任何CPU"编译的WinForms应用程序是否可以配置为在64位服务器上以"x86"运行而无需重新编译应用程序?具体来说,我正在寻找app.config设置或控制面板小程序来完成此任务.所有客户的客户端都是x86,但服务器是x64,我们希望在服务器上安装WinForms应用程序,以便管理员配置和监控系统.我们宁愿不为服务器重新编译.
我有一个解决方案,其中包含从VS 2003,2005,2008迁移的多个项目.在编译RELEASE配置的所有项目时,VS 2008为某些项目创建PDB文件,但不为其他项目创建PDB文件.为什么?
在每个项目的"属性"页面的"构建"选项卡中,我可以看到它们都未选中"定义DEBUG常量"并选中"优化代码".当我检查每个项目的CSPROJ时,我没有发现任何看起来会改变这种行为的差异.我应该在CSPROJ文件中寻找什么?
除了一个创建Windows可执行文件的项目之外,此解决方案中的所有项目都会生成类库.
您能否在.NET中显示用于读取驱动器标签或卷名的示例代码?我觉得这需要WMI,但我不愿意"下拉"到WMI中,因为它就像是在某些版本的操作系统或用户中可能不存在某些对象的意义上下降到基于字符串的SQL查询中可能无权查询某些数据.我很高兴相信我对WMI的看法不对...
我知道这个问题曾多次被问过,但这些答案都没有在我的情况下发挥作用.我有一个ASP.NET MVC2应用程序,它在我的本地IIS 7.5(7600.16385)上以集成模式运行的AppPool上使用Forms身份验证.有趣的是,使用VS 2010附带的开发Web服务器时不会发生这种情况.我的web.config文件包含no <authorization />和no <location />元素.当我点击主页时,除了存储在~/Content目录中的.CSS和.PNG文件之外,我在登录视图中获取所有内容.当我直接使用http://localhost/WebSubscribers/Content/Site.css请求.CSS文件时,我被重定向到登录页面.看起来像一个通配符映射尝试授权每个请求,即使我允许使用该请求<location path="Content" /> 如下所示:
<location path="Content" >
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
我在Stack Overflow上找到的大多数答案建议只添加这样一个位置元素来解决问题,但这对我不起作用,所以我删除了它.
我在IIS中没有创建通配符映射,只是为了确保,我删除了站点并重新创建它指向同一目录,只是为了得到相同的结果.可以在IIS以外的任何地方指定通配符映射吗?我的web.config文件可以"获取"某种通配符映射吗?我使用Telerik MVC控件,它们似乎对web.config文件进行了一些更改(注册命名空间,httpHandlers,模块).
还有其他建议吗?
更新:当使用Chrome浏览网站而未经过身份验证时,"资源"开发人员工具会对我的Site.css文件说明以下内容:"Site.css:-1Resource解释为样式表,但使用MIME类型text/html进行传输."
这样的哑剧类型会在哪里设置?IIS中的站点节点显示".css | text/css | Inherited".
authorization web-config telerik visual-studio-2010 asp.net-mvc-2
我的MVC2应用程序使用一个组件,使后续的AJAX调用回到相同的操作,这会导致服务器上的各种不必要的数据访问和处理.组件供应商建议我将这些后续请求重新路由到不同的操作.后续请求的不同之处在于它们具有特定的查询字符串,我想知道是否可以在路由表中对查询字符串设置约束.
例如,初始请求带有一个URL,如http:// localhost/document/display/1.这可以通过默认路由处理.我想写一个自定义路由来处理像http:// localhost/document/display/1这样的URL ?vendorParam1 = blah1&script = blah.js和http:// localhost/document/display/1?vendorParam2 = blah2&script = blah.js通过检测URL中的"供应商".
我试过以下,但它抛出一个System.ArgumentException: The route URL cannot start with a '/' or '~' character and it cannot contain a '?' character.:
routes.MapRoute(
null,
"Document/Display/{id}?{args}",
new { controller = "OtherController", action = "OtherAction" },
new RouteValueDictionary { { "args", "vendor" } });
Run Code Online (Sandbox Code Playgroud)
我可以编写一条考虑查询字符串的路由吗?如果没有,你还有其他想法吗?
更新:简单地说,我可以编写路由约束,使http:// localhost/document/display/1路由到DocumentController.Display操作但是http:// localhost/document/display/1?vendorParam1 = blah1&script = blah.js被路由在VendorController.Display行动?最后,我希望任何查询字符串包含"vendor"的URL都被路由到该VendorController.Display …
我的WinForms应用程序用于Process.Start()在其本机应用程序中打开文件.我想将屏幕分成两半,在一半显示我的WinForms应用程序,在另一半显示新进程.我知道我可以用它Process.MainWindowHandle来获取窗口句柄,但是如何设置其大小和位置?
我想我必须使用某种Windows API,但是哪一个以及如何使用?由于这不是"我的驾驶室",我不确定是否(以及如何)我需要在64位Windows上使用不同的API.
我有一个包含多个项目的解决方案,其中启动项目有一个后期构建事件,可以完成所有"插件"项目和其他组织任务的复制.将解决方案从VS 2005升级到VS 2008后,似乎只有在我修改启动项目时才会触发构建后事件,这意味着我更新的插件不会插入到当前的调试会话中.这是有道理的,但似乎是行为的改变.是否有其他人注意到关于哪些项目建立的行为改变?
有没有人知道我可以用来在每次点击F5时强制启动项目重建的解决方法?也许我很久以前就把VS 2005配置成这样工作,我已经忘记了所有这些......
在Vista SP1上作为提升管理员运行,我的C#应用程序尝试使用以下代码设置以下规则.不会产生错误,但目录的ACL上也没有任何更改.我错过了什么?
public static void Main( string args[] )
{
string dirPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Company"), "Product" );
Directory.Create(dirPath);
_SetAcl(dirPath, "Users", FileSystemRights.FullControl);
}
private static void _SetAcl(string path, string identity, FileSystemRights rights)
{
var info = new DirectoryInfo(path);
var acl = info.GetAccessControl();
var rule1 = new FileSystemAccessRule(identity, rights, AccessControlType.Allow);
bool modified;
acl.ModifyAccessRule(AccessControlModification.Reset, rule1, out modified);
var inheritanceFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
var rule2 = new FileSystemAccessRule(identity, rights, inheritanceFlags,
PropagationFlags.InheritOnly, AccessControlType.Allow);
acl.ModifyAccessRule(AccessControlModification.Add, rule2, out modified);
}
Run Code Online (Sandbox Code Playgroud)
更新:只需添加以下代码作为_SetAcl方法的最后一行,我的代码就可以了.
info.SetAccessControl(acl);
Run Code Online (Sandbox Code Playgroud) 我有一个WinForms .NET应用程序,根据启用UAC的Vista任务管理器,运行虚拟化"已禁用",即使我不记得在应用程序中添加带有"asInvoker"的清单.VS.NET(这个项目经历了VS.NET的所有四个版本)必须添加我在解决方案资源管理器中看到的\ Properties\app.manifest文件,但是这个文件不包含我希望禁用虚拟化的trustinfo元素.所以我启动了Reflector以查看可能嵌入到我的实际可执行文件中的内容,但是我找不到app.manifest文件.我是否应该能够在可执行文件中找到它的清单或标志?根据VS 2008,构建操作是BaseApplicationManifest,但这是否意味着它没有嵌入在exectable中?有人可以解释为什么我的应用程序在禁用虚拟化的情况下运行,如果我没有要求它,并且一旦解释,有人可以指向我找到通过Reflector在我的应用程序中导致此问题的工件吗?
作为app.manifest的后续,我的解决方案是谁知道多久,它充满了各种IPermissions,我不确定我还需要什么.什么为此文件添加内容,是否包含我不再需要的权限?它应该被修剪或管理吗?我应该向它明确添加trustinfo吗?我想app.manifest只是一个谜,我需要了解更多.
更新:从本文中,我了解到我可以使用SysInternals/Microsoft Sigcheck实用程序查看以下信息,但我不知道我的应用程序是如何使用MyApplication.app签名的.在构建过程中发生了什么?
c:\Users\Public\Programs\SysinternalsSuite>sigcheck.exe -m ceo.exe
sigcheck v1.54 - sigcheck
Copyright (C) 2004-2008 Mark Russinovich
Sysinternals - www.sysinternals.com
"c:\Users\Public\Programs\SysinternalsSuite\ceo.exe":
Verified: Unsigned
File date: 1:47 PM 2/6/2009
Publisher: CEO Image Systems
Description: Main Menu
Product: Image Executive CEO
Version: 2.0.0.0
File version: 2.0.0.0
Manifest:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Run Code Online (Sandbox Code Playgroud)
更新2:看起来我最终会到达那里.VS …
这与代码问题一样是代码维护问题,但我有一个不再检查它的WebForm CustomValidator.它在一年前我上次触摸代码时起作用了,但是现在用户已经请求了一些更改它已经不再有用了......
WebForm包含一个数据绑定下拉列表,默认为" - All - "项,其中String.Empty为其值.当用户单击提交按钮时,验证程序应检查下拉列表的值是否为String.Empty.我在客户端验证代码和服务器验证代码中设置了断点,但都没有触发.
你会从哪里开始寻找?通常的嫌疑人是什么?当然,我将我的工作副本与源代码控制中的内容进行了比较,但没有任何内容因为可疑而跳出来.
万一重要,这是我的代码:
<asp:DropDownList ID="_AssessmentDropDown" runat="server" DataSourceID="_AssessmentsData" CausesValidation="true" AutoPostBack="false"
DataTextField="AssessmentName" DataValueField="AssessmentName" OnDataBound="_HandleAssessmentsBound">
</asp:DropDownList>
<asp:CustomValidator ID="_AssessmentValidator" runat="server" ClientValidationFunction="_HandleValidateAssessment_Client"
ControlToValidate="_AssessmentDropDown" ErrorMessage="* You must select an Assessment."
OnServerValidate="_HandleValidateAssessment" />
<asp:ObjectDataSource ID="_AssessmentsData" runat="server"
OldValuesParameterFormatString="original_{0}" SelectMethod="GetData"
TypeName="DataTableAdapters.GET_GRADE_ASSESSMENTSTableAdapter">
<SelectParameters>
<asp:ControlParameter Name="GRADECODE" ControlID="_GradeCodeDropDown" PropertyName="SelectedValue" />
</SelectParameters>
</asp:ObjectDataSource>
Run Code Online (Sandbox Code Playgroud) .net ×5
c# ×3
acl ×2
windows ×2
winforms ×2
32bit-64bit ×1
asp.net ×1
components ×1
csproj ×1
linq ×1
maintenance ×1
novell ×1
pdb-files ×1
reflector ×1
rights ×1
routing ×1
security ×1
telerik ×1
uac ×1
validation ×1
web-config ×1
webforms ×1
wmi ×1
x86 ×1
x86-64 ×1