有关创建以System.String出它不保护你的SecureString的所有预订一边,怎么能做到呢?
如何将普通的System.Security.SecureString转换为System.String?
我相信很多熟悉SecureString的人会回应说,永远不应该将SecureString转换为普通的.NET字符串,因为它会删除所有安全保护. 我知道.但是现在我的程序用普通字符串完成所有操作,我正在尝试增强其安全性,虽然我将使用返回SecureString的API给我,但我并不是想用它来增加我的安全性.
我知道Marshal.SecureStringToBSTR,但我不知道如何取出BSTR并从中制作System.String.
对于那些可能要求知道我为什么要这样做的人,好吧,我正在从用户那里获取密码并将其作为html表单POST提交以将用户登录到网站.所以......这真的必须使用托管的,未加密的缓冲区.如果我甚至可以访问非托管的,未加密的缓冲区,我想我可以在网络流上进行逐字节流写入,并希望这样可以保证密码的安全性.我希望能够回答至少其中一种情况.
我有为AnyCPU编译的ac#单元测试项目.我们的构建服务器是64位机器,并安装了64位SQL Express实例.
测试项目使用类似于以下内容的代码来标识.MDF文件的路径:
private string GetExpressPath()
{
RegistryKey sqlServerKey = Registry.LocalMachine.OpenSubKey( @"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" );
string sqlExpressKeyName = (string) sqlServerKey.GetValue( "SQLEXPRESS" );
RegistryKey sqlInstanceSetupKey = sqlServerKey.OpenSubKey( sqlExpressKeyName + @"\Setup" );
return sqlInstanceSetupKey.GetValue( "SQLDataRoot" ).ToString();
}
Run Code Online (Sandbox Code Playgroud)
这段代码在我们的32位工作站上工作正常,并且在我最近使用NCover启用代码覆盖率分析之前,在构建服务器上工作正常.因为NCover使用32位COM组件,所以测试运行器(Gallio)作为32位进程运行.
检查注册表,下面没有"实例名称"键
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server
在32位模式下运行的应用程序是否有办法访问Wow6432Node外部的注册表?
我经常比较不同数据库中表格中的数据.这些数据库没有相同的架构.在TSQL中,我可以使用DB> user>表结构(DB1.dbo.Stores,DB2.dbo.OtherPlaces)引用它们来提取数据以进行比较.我非常喜欢LINQPad的想法,但我似乎无法在同一组语句中轻松地从两个不同的数据上下文中提取数据.
我见过人们建议只是更改连接字符串以将数据从其他源提取到当前架构中,但正如我所提到的,这是不行的.我刚跳过常见问题解答中的一页吗?这对我来说似乎是一个相当常规的程序.
在"简单"的世界中,我希望能够简单地引用LINQPad创建的类型化数据文本.然后我可以简单地说:
DB1DataContext db1 = new DB1DataContext();
DB2DataContext db2 = new DB2DataContext();
从那里开始工作.
C#6为内插字符串文字带来了编译器支持,语法如下:
var person = new { Name = "Bob" };
string s = $"Hello, {person.Name}.";
Run Code Online (Sandbox Code Playgroud)
这对于短字符串很有用,但是如果要生成更长的字符串,必须在一行中指定它吗?
使用其他类型的字符串,您可以:
var multi1 = string.Format(@"Height: {0}
Width: {1}
Background: {2}",
height,
width,
background);
Run Code Online (Sandbox Code Playgroud)
要么:
var multi2 = string.Format(
"Height: {1}{0}" +
"Width: {2}{0}" +
"Background: {3}",
Environment.NewLine,
height,
width,
background);
Run Code Online (Sandbox Code Playgroud)
我无法找到一种方法来实现这一点,使用字符串插值,而不是只有一行:
var multi3 = $"Height: {height}{Environment.NewLine}Width: {width}{Environment.NewLine}Background: {background}";
Run Code Online (Sandbox Code Playgroud)
我意识到在这种情况下你可以用来\r\n代替Environment.NewLine(不太便携),或者把它拉到本地,但是有些情况下你不能将它减少到一行以下而不会失去语义强度.
是不是字符串插值不应该用于长字符串?
我们应该使用StringBuilder更长的字符串吗?
var multi4 = new StringBuilder()
.AppendFormat("Width: {0}", width).AppendLine()
.AppendFormat("Height: {0}", height).AppendLine()
.AppendFormat("Background: {0}", background).AppendLine()
.ToString();
Run Code Online (Sandbox Code Playgroud)
还是有更优雅的东西?
public static class Extensions{
public static void Dump<T>(this T o) { }
public static void Dump<T>(this T o, string s) { }}
Run Code Online (Sandbox Code Playgroud)
这些行允许我将代码从LINQPad复制到VS并运行它而不用.Dump()注释每一行但是这还不够...... http://code.google.com/p/linqpadvisualizer/ - 不太舒服: (
我在VS中搜索LINQPad的最佳结果是这个站点,下面是Pat Kujawa的代码.
using System.Diagnostics;
using System.IO;
public static class Extensions
{
public static void Dump<T>(this T o)
{
string localUrl = Path.GetTempFileName() + ".html";
using (var writer = LINQPad.Util.CreateXhtmlWriter(true))
{
writer.Write(o);
File.WriteAllText(localUrl, writer.ToString());
}
Process.Start(localUrl);
}
}
Run Code Online (Sandbox Code Playgroud)
但错误1当前上下文中不存在名称"LINQPad"
我在网上找不到任何LINQPad.dll
所以我刚刚从亚马逊的推荐信到对象LINQ使用C#4.0:使用和扩展LINQ到对象和并行LINQ(PLINQ) .
它说这本书介绍了使用dynamicLinq 的关键字,让我思考:
dynamic对于你无法用Linq 做的关键字,你能做什么样的超赞呢?
嗨,我很期待学习Linqpad.任何人都可以告诉我,是否有任何电子书或教程网站可以帮助我从一开始就逐步学习Linqpad.我试着在网上搜索,但是找不到任何好材料.请帮忙,因为它对我来说非常重要.
我有一个项目,我必须处理敏感数据.你知道如何打开一个keepass数据库表单c#来使用数据吗?
我已经下载了这些来源.我会看看它得到我需要的东西.还有其他想法吗?
我知道我的问题听起来很基本,但我搜遍了整个地方,一无所获.这是我的代码:
public MainWindow()
{
InitializeComponent();
Map newMap = new Map();
newMap.setMapStrategy(new SmallMapStrategy());
newMap.createMap();
System.Windows.Forms.PictureBox pictureBox1 = new System.Windows.Forms.PictureBox();
pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(newMap.grid[3].afficher);
}
Run Code Online (Sandbox Code Playgroud)
这是一个功能:
public override void afficher(object sender, PaintEventArgs e)
{
e.Graphics.DrawImage(squareImage, pos_x, pos_y, 50, 50);
}
Run Code Online (Sandbox Code Playgroud)
squareImage是与Drawing.Image对应的属性.pos_x和pos_y是自定义int32属性.
我想要的是在运行我的应用程序时看到图像...
是否可以将 xUnit 与 LINQPad 一起使用?
能够首先为在 LINQPad 中设计的概念编写一些测试会很棒。这比添加另一个 ConsoleApp23423894238 更容易,只是为了能够快速编写一些单元测试。
运行/调试时,调用MessageBox或Microsoft.VisualBasic.Interaction.MsgBox挂起而不显示任何对话框.我认为它被阻止了,但没有看到如何解决这个问题的例子.
如果我想展示一些东西,console我通常会这样写:Console.Write("Hello{0}", AnyNumber);.
但是,如果我使用Interaction.MsgBox并写入,Interaction.MsgBox("Hello {0}, AnyNumber");我会收到错误,为什么会这样?
我喜欢在编写时使用{0}比+(字符串连接)更多的占位符,我认为编写它更容易...
所以我的问题是:为什么我不能在MsgBox中使用占位符,还有其他方法可以使用它们吗?
这是一个如何在MsgBox中使用它的示例:
static void multiplikation(int tal1, int tal2)
{
if (tal1*tal2 == 100)
{
Interaction.MsgBox("Hello!\nResult:\n" + (tal1 * tal2));
}
else
{
Interaction.MsgBox("Resultat:\n" + (tal1 * tal2));
}
}
static void addition(int tal1, int tal2)
{
if (tal1 + tal2 == 100)
{
Console.Write("Hello!\nResult:{0}\n", (tal1 + tal2));
}
else
{
Console.Write("Resultat:{0}\n", (tal1 + tal2));
}
}
Run Code Online (Sandbox Code Playgroud) 将字符串日期格式化为特定格式的最佳方法是什么?
例如,如果输入30/09/2014它将被格式化为2014-09-30前者的任何其他类似的日期格式?