C# 使用不安全代码发布web应用程序

C# 使用不安全代码发布web应用程序,c#,asp.net,publishing,unsafe,C#,Asp.net,Publishing,Unsafe,我正在尝试发布一个web应用程序(使用VS2012 web),其中需要运行vb脚本 该脚本当前无法正确运行,可能是因为缺少权限。我目前正在尝试以用户身份运行它,并提供一些凭据。我必须提供的密码必须位于System.Security.SecureString中,该密码需要创建一个字符* 当我在debug中运行我的应用程序时,一切都正常,正如预期的那样。但当将应用程序发布到服务器时,它会说: 1>C:\SVN\…\Default.aspx.cs(108,21108,27):错误CS0227:只有在使

我正在尝试发布一个web应用程序(使用VS2012 web),其中需要运行vb脚本

该脚本当前无法正确运行,可能是因为缺少权限。我目前正在尝试以用户身份运行它,并提供一些凭据。我必须提供的密码必须位于
System.Security.SecureString
中,该密码需要创建一个字符*

当我在debug中运行我的应用程序时,一切都正常,正如预期的那样。但当将应用程序发布到服务器时,它会说:

1>C:\SVN\…\Default.aspx.cs(108,21108,27):错误CS0227:只有在使用/Unsafe编译时才可能出现不安全代码

我允许在项目属性中使用不安全的代码,但我不知道为什么VS在调试时看到该属性,而在发布时却没有看到

当我点击publish时,我在错误列表中看到CS0227错误,但它只停留了1秒,然后消失了。。。这一秒似乎足以使构建失败

你知道问题出在哪里吗

这是我的密码:

Process proc = new Process();
ProcessStartInfo psi = new ProcessStartInfo("C:\\Windows\\System32\\cscript.exe", "\"" + scriptPath + "\" " + args);
psi.UseShellExecute = false;
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.CreateNoWindow = true;

psi.Domain = "MyDomain";
psi.UserName = "MyUsername";

System.Security.SecureString hashPwd;

unsafe
{
    // Instantiate a new secure string. 
    fixed (char* pChars = pwd)
    {
        hashPwd = new System.Security.SecureString(pChars, pwd.Length);
    }
}

psi.Password = hashPwd;


//Set the process' start info
proc.StartInfo = psi;

//We start the script.
proc.Start();

请在Web.config文件中添加此代码,并检查它是否适用于您

<compilers>
<compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/unsafe" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</compilers>

使用不安全代码发布非常简单

以下是您的操作方法:

发布时似乎忽略了“不安全”的项目设置,因此需要手动打开.CSPROJ文件并包括:

  <PropertyGroup>
    ...
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
  </PropertyGroup>

...
真的
这为我解决了问题


谷歌搜索了这个问题,但什么也找不到。检查了*.targets文件中的“不安全”,这导致我找到了“AllowUnsafeBlocks”标记。

否,同样的问题。。。我不得不把它放在标签里编译,但它仍然不会发布。。。奇怪的是一个编译错误(CS0227)持续了大约1秒,然后它消失了。我也有同样的问题。有什么办法可以阻止它吗?谢谢你的回答,但这个标志只是告诉C#编译不安全的代码。。。对我有效的解决方案就是删除不安全的代码,并放弃在C#:中显式使用指针。所有配置和允许安全代码都应该被选择。