使用C#对象初始化程序语法我可以实例化一个匿名对象,如下所示:
object empData = new { name = "bob", age = 30, salary = 100000 };
Run Code Online (Sandbox Code Playgroud)
但是,如果我将初始值设定项存储在字符串中,例如:
string init = "{ name = \"bob\", age = 30, salary = 100000 }";
Run Code Online (Sandbox Code Playgroud)
什么是将此字符串转换为对象实例的最佳方法?
在C#中检查Windows用户帐户名是否存在的最简单,最有效的方法是什么?这是在域环境中.
我确实找到了这篇文章,但是这些示例与验证和操作用户帐户有关,他们假设您已经拥有用户可分辨名称,而我从用户帐户名称开始.
我确信我可以使用AD来解决这个问题,但在此之前,我想知道是否有一个简单的更高级API可以满足我的需求.
*更新*
可能有很多方法可以做到这一点,Russ发布了一个可以工作的方法,但我无法弄清楚如何调整它以在我的环境中工作.我确实找到了一种不同的方法,使用WinNT提供程序为我完成了这项工作:
public static bool UserInDomain(string username, string domain)
{
string path = String.Format("WinNT://{0}/{1},user", domain, username);
try
{
DirectoryEntry.Exists(path);
return true;
}
catch (Exception)
{
// For WinNT provider DirectoryEntry.Exists throws an exception
// instead of returning false so we need to trap it.
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
PS 对于那些不熟悉上面使用的API的人:您需要添加对System.DirectoryServices的引用才能使用它.
我找到的链接帮助了我:如何使用ADSI获取用户信息 示例使用ADSI,但也可以应用于.NET DirectoryServices.它们还演示了可能有用的用户对象的其他属性.
我有一些数据来自数据源,这是一堆名称/值对,我存储在Dictionary <string,object>中.
我想动态定义一个类,其属性映射到字典中的键/值对,以及基于它所代表的数据类型的方法.这将允许cmdlet的用户作为对象的属性访问值,并在其上调用方法.
我用Get-WmiObject看到了这个例子.它返回ManagementObject的实例(基本上是一个通用属性包),但用户可以直接访问属性并在其上调用方法(即无需在ManagementObject上调用GetPropertyValue/InvokeMethod方法).
PS C:\temp> $comp = Get-WmiObject Win32_ComputerSystem
PS C:\temp> $comp | Get-Member
TypeName: System.Management.ManagementObject#root\cimv2\Win32_ComputerSystem
Name MemberType Definition
---- ---------- ----------
JoinDomainOrWorkgroup Method System.Management.ManagementBaseObject JoinDomainO
Rename Method System.Management.ManagementBaseObject Rename(Syst
SetPowerState Method System.Management.ManagementBaseObject SetPowerSta
UnjoinDomainOrWorkgroup Method System.Management.ManagementBaseObject UnjoinDomai
AdminPasswordStatus Property System.UInt16 AdminPasswordStatus {get;set;}
AutomaticManagedPagefile Property System.Boolean AutomaticManagedPagefile {get;set;}
AutomaticResetBootOption Property System.Boolean AutomaticResetBootOption {get;set;}
... etc ...
Run Code Online (Sandbox Code Playgroud)
我如何用自己的对象做到这一点?
UPDATE
接受Keith的答案,这是一种动态生成代码的通用.NET框架方法.这应该适用于我的场景,虽然我认为这可能是矫枉过正.
我希望有人能够使用PowerShell提供的功能提供一个明确的例子.似乎应该有一种通过扩展Powershell SDK中描述的PSObject,PSProperty和PSMethod类来动态创建类的方法.
不幸的是,围绕这个问题的文档似乎相当糟糕,有很多荒谬的陈述," 尽管可以从这个类派生出来,但没有确定的方法可以做到这一点,任何这样做的尝试都可能导致意外行为. "
更糟糕的是,MSDN中解释PowerShell扩展类型系统的所有链接似乎都很糟糕!我在网上看到的唯一例子是如何从PowerShell脚本执行此操作,而不是使用C#和SDK开发cmdlet的人.
您好,来自PowerShell团队的任何人都在倾听?
我有一个具有复杂设置要求的应用程序.我非常熟悉一些用于创建安装程序的工具,例如Wix,Visual Studio安装项目,Inno-setup和第三方工具.但对于这个特定的应用程序,我已经确定我需要在C#中从头开始编写安装程序,而不是使用任何这些工具.Joel表达的一些推理适用于此,除了我想在C#而不是MFC中执行此操作.
无论如何,我的问题是:我如何创建一个.NET可执行文件,它可以包含一组在运行时提取的文件?在这种情况下,exe是安装程序,文件是它需要安装的程序文件.另外,我如何使程序可执行完全独立,即使我使用一些外部程序集(我自己以及第三方)我希望它们被打包成一个单独的EXE(在C/C++本机世界中这是通过静态链接完成).
UPDATE
这是我到目前为止所采用的方法,除非有人提出更好的建议,否则我会坚持这样做:
我现在有一个VS项目用于我的安装程序,它构建一个自包含的exe文件,其中包含嵌入其中的所有文件.当正在安装的应用程序的文件列表发生更改时,我只需更新清单XML并重建.
现在我可以专注于我的其他设置逻辑!
我正在使用ASP.NET MVC平台开发一个应用程序,该平台将作为Web服务(SaaS模型)公开.我正在尝试确定为每个用户帐户分区URL命名空间的最佳方法.该应用程序需要通过SSL安全访问,因此我主要关注的是提出一种适用于SSL证书的URL设计.以下是我提出的选项.在每个示例中,bob和jane是两个示例用户帐户:
例如
https://bob.example.com
https://jane.example.com
Run Code Online (Sandbox Code Playgroud)
例如
https://bobs-domain.com
https://domain-of-jane.com
Run Code Online (Sandbox Code Playgroud)
在这种情况下,每个用户都有一个与其域名绑定的SSL证书.我能想到的一个重大缺点是我们的服务器必须维护所有用户证书的私钥,我们必须设计一个允许用户安全地将私钥传输到我们服务器的系统.即使我们有这样一个系统,我觉得用户必须获得证书然后将私钥提交给我们是一个太大的负担.
或者,我们可以在注册时为每个用户自动发布和配置SSL证书,这样他们就可以开始通过SSL访问他们的应用程序而无需其他步骤.这需要我们成为SSL证书的发行者,我还没有考虑过......我们可能会成为像Verisign这样专门研究这类事情的其他大公司的经销商.
尽管这种方法显然很痛苦,但这个选项确实启用了我们将来可能想要提供的一些功能,即允许用户通过他们自己的公司域名访问自己的应用程序品牌版本.
例如
https://example.com/bob
https://example.com/jane
Run Code Online (Sandbox Code Playgroud)
从SSL证书维护的角度来看,这可能是最好的选择.我们只需要一个固定域SSL证书(例如example.com),供所有用户使用.
遗憾的是,这种URL设计与我们当前应用程序架构的其他方面不兼容,尤其是在负载平衡方面.
我向你们提出的问题是:你会选择什么选择,为什么?我特别喜欢听到现实世界的例子和经历,但我还没有提出任何其他问题或疑虑.
ASP.NET是否公开了它用于生成会话ID的基础函数?我想生成一个用于Web服务的会话令牌,但它不会放在Set-Cookie头中.如果ASP.NET已经有一个我可以用来生成会话ID的函数,这将使我不必自己滚动.
我试图弄清楚如何使生成的LINQ to SQL类标记为private而不是public,以便它在程序集外部不可见.似乎没有办法在Visual Studio O/R设计器或SqlMetal工具中执行此操作,除非我遗漏了某些内容.有没有办法做到这一点?
我问,因为我在内部使用LINQ to SQL作为业务逻辑程序集中的数据访问层.我向客户端公开了一组单独的自定义实体类,我不希望暴露LINQ to SQL类.
我刚刚安装了ASP.NET MVC 3 RC来尝试升级MVC 2站点.我遇到了一个渲染问题,我设法在网站之外重新编写,使用从头创建的MVC 3项目.
这是我的Razor cshtml视图:
@using Mvc3RCTest.Helpers
<h2>Demo Render Bug</h2>
<div class="content">
@{ Html.RenderTest(); }
</div>
Run Code Online (Sandbox Code Playgroud)
RenderTest是一个HTML扩展,定义如下:
using System.Web;
using System.Web.Mvc;
namespace Mvc3RCTest.Helpers
{
public static class TestHtmlExtensions
{
public static void RenderTest(this HtmlHelper html)
{
HttpResponseBase r = html.ViewContext.HttpContext.Response;
r.Write("<ul>");
for (int i = 0; i < 10; ++i)
{
r.Write("<li>" + i + "</li>");
}
r.Write("</ul>");
}
}
}
Run Code Online (Sandbox Code Playgroud)
呈现时,HTML如下所示:
<ul><li>0</li><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li></ul>
<h2>Demo Render Bug</h2>
<div class="content">
</div>
Run Code Online (Sandbox Code Playgroud)
如您所见,RenderTest HTML扩展的输出在Razor模板的其余部分之前被错误地发出.好像Razor渲染引擎试图缓存整个输出,而不知道HTML扩展可以直接写入输出.
有没有人见过这个问题?任何人都知道如何解决这个问题,而不必重做我的所有HTML扩展而不是直接写入输出?
我有很多使用原始ADO.NET(DbConnection,DbDataReader等)的现有代码.我想转换到使用LINQ to SQL获取新代码,但是现在将现有代码和新代码放在一组统一的Repository类之后.
我遇到的一个问题是:我希望Repository类将结果集公开为IQueryable <>,这是我使用LINQ to SQL免费获得的.如何将现有的DbDataReader结果集包装在IQueryable中?我是否必须从头开始在DbDataReader上实现IQueryable?
注意我知道LINQ to DataSet,但由于内存规模问题,我不使用DataSet,因为我处理的结果集可能非常大(1000s的顺序).这意味着基于DbDataReader实现的IQueryable也需要高效(即不将结果缓存在内存中).
有谁知道如何使用MSI包安装带有NGEN的二进制文件的IronPython 2.0?该负责人IronPython的网页说,NGEN选项将大大提高启动时间,但由于某种原因,它不是默认启用的.它实际上并没有说明你需要传递哪些MSI参数来启用它,我在网站上找不到文档页面,所以我希望有人知道.(澄清:我正在进行静默安装以分发到多台机器,所以我正在寻找命令行参数,谢谢)
我问这个是因为一个简单的"hello world"脚本的开始时间在我的笔记本电脑上大约5-6秒,2 + ghz Intel Core 2 Duo w/4gig.每次跑步都会发生这种情况.我希望这个NGEN选项可以解决这个问题,因为它现在很慢,几乎感觉我正在使用编译语言.
更新:srivatsn有正确的答案使用NGENDLLS = True命令行参数.
为了将来参考,这里是我用于静默安装IronPython 2.0的完整MSI命令行:
msiexec /qn /i "IronPython.msi" NGENDLLS=True
Run Code Online (Sandbox Code Playgroud)
感谢Igal,但我实际上正在进行静默安装(通过msiexec/qn),以便集中分发到多台机器.有谁知道命令行参数(非UI)启用NGEN选项?
在诸如PowerShell和IronPython之类的.NET脚本语言中,当您想要使用.NET类时,通常需要导入程序集名称.有没有快速找到这些信息的方法?
例如,如果我想使用System.Net.Mail,我如何快速找出它所在的汇编?我不一定在寻找程序化的方式,即使是在线参考也可以.MSDN .NET类引用似乎没有告诉你(例如System.Net.Mail)
我只关心标准的.NET类,显然没有标准的命名空间/类到自定义和第三方类的程序集映射.
是否有工具或一些通用的方法将ASP.NET应用程序的所有文件打包成二进制形式,以防止在部署后进行修改?我想有一组签名的二进制文件和一个配置文件,用于我们允许客户修改的设置.有没有人试过这个,甚至有可能吗?
我会为一个光滑的商业产品支付合理的金额,以最小的麻烦做到这一点.
UPDATE
对不起,从答案我可以看出我不清楚.我的意思是直接打包所有文件,而不仅仅是代码文件.这意味着aspx,脚本,图像等.我不是要阻止逆向工程......这是一个可支持性问题,即避免处理客户弄乱文件带来的问题.
c# ×4
.net ×2
asp.net ×2
asp.net-mvc ×2
ironpython ×2
linq ×2
linq-to-sql ×2
ado.net ×1
dynamic ×1
installation ×1
powershell ×1
razor ×1
security ×1
session ×1
sessionid ×1