Как использовать небезопасный код в safe contex?
мне нужно использовать SecureString для класса Microsoft, и я нашел следующий код на интернет:
public static class SecureStringExt
{
public static SecureString ConvertToSecureString(this string password)
{
if (password == null)
throw new ArgumentNullException("password");
unsafe //Red highlighted line
{
fixed (char* passwordChars = password)
{
var securePassword = new SecureString(passwordChars, password.Length);
securePassword.MakeReadOnly();
return securePassword;
}
}
}
}
единственная проблема в том, что unsafe ключевое слово продолжает бросать мне ошибку, говоря Cannot use unsafe construct in safe context.
К сожалению, я не мог понять, почему это происходит...
Примечание: Приведенный выше код работает в LINQPad, но не в VS2013 (с resharper).
2 ответов
Я не уверен, что вам нужен небезопасный код в этом случае (см. ответ @mybirthname).
но когда требуется небезопасный код, его можно включить в свойствах проекта.
- в главном меню, нажмите кнопку
Projectа то<ProjectName> properties... - нажмите на кнопку
Buildстраница. - выберите
Allow unsafe code.
или можно указать /небезопасных опции компилятора явно.
public static SecureString GetSecureString(string password)
{
SecureString secureString = new SecureString();
foreach (char c in password)
{
secureString.AppendChar(c);
}
secureString.MakeReadOnly();
return secureString;
}
вы можете сделать то же самое без небезопасный код.
