我有一个C#/ Lightswitch应用程序,用于通过python脚本生成一个xml文件。我没有编写脚本,但是我使用Python 2.7.1在C#应用程序之外测试了它们。并且他们正常工作没有错误。现在在Visual Studio中我已经保存(链接并复制到输出)服务器端项目中的py文件。在C#中,我调用此处显示的ASB_script.py ...
from ABuilder import ABuilder
# Specify the input and output file names
baseXMLFileName = 'as_func_base.xml'
outputFileName = 'as_func_tP74.xml'
configFileName = 'Config_File_Name.xml'
# Create ABuilder Instance
AS = ABuilder(baseXMLFileName, outputFileName, configFileName)
# Specify built-in sequences
globalChecks = AS.getGlobalChecks()
abort = AS.getAbortSequence()
more code.....
顶部的引用在ABuilder.py文件中定义,该文件也保存在项目中,看起来像这样......
import xml.etree.ElementTree as ET
class ABuilder(object):
channelTypes = ['Inputs', 'Outputs', 'Calculations', '[Other]...']
def __init__(self, baseXMLFileName, outputFileName, configFileName):
self.SequenceTime = 0
self.outputFileName = outputFileName
self.tree = ET.parse(baseXMLFileName)
self.root = self.tree.getroot()
self.root.set("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
self.channelNames = []
ctree = ET.parse(configFileName)
# croot = ctree.getroot()
# for elem in ctree.iter("Name"):
# more commented code
NEW POINT - 当我执行此代码时,它会抛出此帖子标题中列出的System.Exception语法错误。我忽略了在我的第一篇文章中指出Exeception发生在以下代码的最后一行......(应该看起来很熟悉)
case "RunPythonScript":
{
var engine = Python.CreateEngine();
var searchPaths = engine.GetSearchPaths();
searchPaths.Add(@"C:\Program Files (x86)\IronPython 2.7\Lib");
searchPaths.Add(@"D:\Projects\Python\xml-generation-python\");
engine.SetSearchPaths(searchPaths);
var mainfile = @"D:\Projects\Python\xml-generation-python\ASB_script_threePortProof.py";
var scope = engine.CreateScope();
// Execute code
engine.CreateScriptSourceFromFile(mainfile).Execute(scope);
新点 - 我已经想出如何在Visual Studio框架内的“交互模式”中执行py文件,并且它们正确生成xml,所以我认为py和xml文件都可以。
答案 0 :(得分:1)
如果您在Visual Studio中创建了该文件,那么它很有可能与BOM一起保存并导致问题。默认情况下,Visual Studio以这种方式保存它。检查文件的编码并在没有文件的情况下保存。
要执行此操作,请打开文件并转到菜单File
- > Advanced Save Options...
并将Encoding
更改为Unicode (UTF-8 without signature) - Codepage 65001
(或任何合适的内容)并保存文件。
看看它是否会导致问题。