【问题标题】:Issues moving solution from VS2013 to VS2015 having to do with cryptography?将解决方案从 VS2013 迁移到 VS2015 与密码学有关的问题?
【发布时间】:2016-05-18 21:39:15
【问题描述】:

我有一个相对较大的 WinForms 应用程序,它是在 Visual Studio 2013 下开发的。我最近在另一台计算机上升级到 Visual Studio 2015,并一直试图让项目在它下运行。

我的第一个问题/担心是,当我第一次在 Visual Studio 2015 中打开项目时,它并没有要求我将解决方案“升级”到 Visual Studio 2015,它只是愉快地打开了解决方案。我习惯于让 Visual Studio 要求“升级”解决方案并创建一个新的.sln 文件,该文件被识别为例如 Visual Studio 2013 解决方案,而不是旧的 VS10 解决方案。

我面临的实际问题是大约 10 个似乎与密码学有关的错误。据我推测,这与解决方案本身以及微软在后台对其所做的事情有关,因为我在项目中使用的最多的密码是生成Guid

错误图片

我遇到的另一个问题是,由于我不习惯,我无法双击它们自身的错误,从而导致 Visual Studio 认为它们正在发生。因此,我不确定是什么产生了它们或从这里去哪里。

有什么建议吗?


这是在旧型号 Lenovo Thinkpad 上安装的 Windows 7。我也没有这台计算机的管理员权限。


编辑: 到目前为止,我已尝试将 <enforceFIPSPolicy enabled="false"/> 添加到 C\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Devenv.exe.config 的 Visual Studio 15 设置文件中,尽管每当我尝试编辑它(即使在重新启动后)该文件被另一个程序“总是”打开。因此,我似乎无法编辑文件以关闭 Visual Studio 15 的 FIPS。

我仍然愿意接受建议或线索。

EDIT2: 在 IT 的帮助下,我已经成功地将 <enforceFIPSPolicy enabled="false"/> 加入 IDE 设置(使用 this article)。尽管这似乎完全没有任何作用,但似乎它被忽略了。

这里的另一个问题/线索是,即使我在 Visual Studio 中创建了一个全新的 C# 项目,当我尝试编译时,我也会收到相同的错误。所以我必须假设 Visual Studio 在“后台”某处使用 SHA256 类。如果我确实可以控制它的使用,我会尝试在下面实现@Kevin 的答案。

我在网上找到了另一个possible solution,但我不确定它的有效性

VS 2012 现在在运行的单独进程中构建 C# 项目 构建。您添加到 devenv.exe.config 的条目(适用于 VS 2010)不会被这个过程看到。您应该添加相同的条目, 即 到 msbuild 的配置文件;通常在 c:\Windows\Microsoft.Net\Framework\v4.0.30319\msbuild.exe.config"

当我有时间处理 .NET 4.5+ msbuild.exe.config 文件并报告回来时,我会尝试完成这项工作。

【问题讨论】:

  • 您是指 Visual Studio 2015 还是 VS15?它们是不同的产品。 VS15 目前仅作为预览版提供。我怀疑你的意思是 Visual Studio 2015...
  • 自VS 2012以来,解决方案和项目文件已经向后兼容,因此无需“升级”它。它可能会在保存后更改文件以添加一些元数据,但通常它们是完全可以互换的。
  • 哦,我从来没有意识到有区别。是的“VS15”,移动“VS”应该读作“Visual Studio”
  • 消息中的错误很清楚。如果您发布了我可以引用的实际文本 - 这就是为什么不使用图片
  • @stuartd 我通常会把它们打出来。但是..好吧..这对我来说有点。

标签: c# visual-studio-2013 visual-studio-2015


【解决方案1】:

我采用的解决方案是outline here

<enforceFIPSPolicy enabled="false"/>被添加到几个文件中,即

C:\Program Files (x86)\MSBuild\12.0\Bin\msbuild.exe.config
C:\Windows\Microsoft.Net\Framework\v4.0.30319\msbuild.exe.config
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Devenv.exe.config

虽然我认为真正使它工作的是第一个文件。

【讨论】:

    【解决方案2】:

    您不能双击错误并将其转到引发错误的位置,因为它是在 SHA256 类中引发的。如果设置了 FIPS 合规位,则任何不符合 FIPS 的 .NET 加密类都会引发此错误。

    你有两个选择来解决这个问题...

    首先,您可以在您尝试运行应用程序的机器上关闭 FIPS 合规性位(不推荐)。

    否则,您可以更新代码以使用符合 FIPS 的 SHA256 版本 (SHA256CryptoServiceProvider)。这需要 .NET Framework 3.5 或更高版本。

    【讨论】:

    • 我对您提供的第二种解决方案感到困惑。有问题的机器安装了 .NET 4.6.1,项目本身以 .NET 4.5 为目标。我假设我已经在使用 .NET 3.5 或更高版本。 // 至于第一个解决方案,您的意思是告诉 Visual Studio 忽略该问题(如此 SO 答案stackoverflow.com/questions/5034526/… 中所述)或从字面上关闭整个机器上的 FIPS 合规性(我不知道该怎么做) ?
    • 第一个解决方案告诉操作系统不要首先引发错误(您允许执行不使用经 NIST 认证为符合 FIPS 的算法的加密类)。不建议这样做。第二种解决方案是告诉您停止使用 SHA256 类(未通过 NIST 认证为 FIPS 兼容),而是使用经 NIST 认证的 FIPS 兼容的 SHA256CryptoServiceProvider 类。我提到 Framework 3.5 的原因是,当 FIPS 兼容类在 .NET Framework 中可用时。
    • 附带说明,SHA256CryptoServiceProvider 类本身并没有经过认证,它是 Windows CryptoAPI 的包装器,它是唯一通过 NIST 认证的符合 FIPS 140-2 的加密算法集,可用于Windows 操作系统。
    • 你是对的,第一个解决方案不是一个选项。虽然至于第二个我不是使用 SHA 类的人,但它似乎是 Visual Studio 在后台。如果我创建一个全新的 C# 项目,它不会因为相同的错误而编译。从那我不得不假设它是 Visual Studio,但我不知道在哪里。 // 我可以替换除 Visual Studio 之外使用的算法吗?
    • 仔细查看堆栈列表,似乎 CodeAnalysis 正在调用 SHA256Managed,而后者又在调用 SHA256。尝试在您的 MSBuild 脚本中关闭 CodeAnalysis 并查看它是否可以编译。
    猜你喜欢
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多