我们的代码库主要用 C# 编写,并使用 IronPython 3.4 编写一些脚本功能。直到最近,我们的项目还基于过时的 .Net Framework 4.8,但最近转向了 .Net 8。
有一件奇怪的事情困扰着我们:以 .Net Framework 作为目标,我们可以在 Visual Studio 中加载 python 脚本文件并设置断点,这些断点在执行脚本时很好地触发。 转移到 .Net 8 后,这不再起作用。
我创建了一个最小的工作示例来确认此行为:
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;
using Microsoft.Scripting.Runtime;
using System;
using System.Collections.Generic;
namespace ScriptTest
{
internal class Program
{
static void Main(string[] args) {
ScriptEngine pythonEngine = null;
ScriptScope pythonScope = null;
Dictionary<string, object> options = new Dictionary<string, object>();
options["Debug"] = ScriptingRuntimeHelpers.True;
pythonEngine = Python.CreateEngine(options);
pythonScope = pythonEngine.CreateScope();
ScriptSource pythonSrc = pythonEngine.CreateScriptSourceFromFile(@".\Test.py");
CompiledCode compiled = pythonSrc.Compile();
compiled.Execute(pythonScope);
}
}
}
使用以下非常简单的 Test.py 文件:
print('Test')
我注意到的一件事是,在 .Net Framework 版本中,一旦 Python 脚本执行,就会加载一个名为 Snippets.debug.scripting 的符号“文件”。这在 .Net 8 版本中不会发生。
有什么想法如何在 .Net 8 上使用断点吗?也许这只是一些 Visual Studio 设置,但我还没有找到线索。
你的意思是你的Python文件(Test.py)中的断点没有被.Net8命中吗?
如果是,我建议您检查是否已启用
Enable Just My Code
。
请转到=>调试=>选项=>取消选中仅启用我的代码
如果取消选中仅启用我的代码没有帮助,请转到工具->导入/导出设置->重置所有设置,然后再次取消选中启用仅我的代码以查看问题是否仍然存在。