Надстройка IronPython для Excel-Dna - Исключение, касающееся справки Microsoft.Dynamic

Я начинаю разработку надстройки Excel-DNA с использованием IronPython с некоторым C # в качестве оболочки для вызовов IronPython. С щедрой помощью разработчика Excel-DNA я преодолел некоторые из первоначальных проблем , связанных с запуском и запуском образца, но теперь я пытаюсь отладить надстройку в SharpDevelop, и я столкнулся с некоторыми проблемами. Поскольку я совершенно новичок в большей части этого, я не совсем уверен, что это проблема SharpDevelop, .NET, Excel-DNA или IronPython.

Я создал два проекта в одном решении, one - это библиотека классов C #. Другой - это библиотека классов Python. Я настраиваю проект для отладки, следуя руководству , которое я нашел в блоге. Я могу пройти через первые несколько строк кода C #, так что это прогресс, но когда я перехожу к следующей строке:

pyEngine.Runtime.LoadAssembly(myclass); 

, я получаю исключение:

«Не удалось загрузить файл или сборку. 'Microsoft.Dynamic, Версия = 1.0.0.0, Культура = нейтральный, PublicKeyToken = 31bf3856ad364e35 'или одна из его зависимостей. Расположенный определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040) «

Но я почти уверен, что добавил ссылку на Microsoft.Dynamic в свой проект. Это версия 1.1.0.20. Она включена в дистрибутив IronPython, но также находится в другом месте на моем компьютер. Я попытался установить ссылку для обоих, но у них обоих одинаковый номер версии и одинаковый размер файла. Ни один из них не работает. Нужна ли мне версия 1.0.0.0 или я делаю что-то еще не так? Я действительно понимаю, почему что-либо pyEngine (ScriptEngine, возвращаемый Python.CreateEngine ()) будет пытаться загрузить версию, отличную от той, которая включена в дистрибутив.

Код ниже. Сообщите мне, если вам понадобится какая-либо другая информация.

MyAddin.cs

/*
Added these references all as Local Copies - probably not necessary?

System.Windows.Forms
Microsoft.CSharp

ExcelDna.Integration (from Excel-DNA distribution folder)
IronPython (from IronPython folder)
IronPython.Modules (from IronPython folder)
Microsoft.Dynamic (from IronPython folder)
Microsoft.Scripting (from IronPython folder)
Microsoft.Scripting.Metadata (from IronPython folder)

mscorlib (I don't really know why I added this, but it was one of the references in my IronPython class library)

MyClass (this is the reference to my IronPython class - I checked to see that it gets copied in every time I rebuild the solution and it does)

These were automatically added by SharpDevelop when I created the project.
System
System.Core
System.Windows.Forms
System.Xml
System.Xml.Linq
*/
using System;
using System.IO;
using System.Windows.Forms;
using ExcelDna.Integration;
using System.Reflection;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;

public class MyAddIn : IExcelAddIn
{
    public void AutoOpen()
    {
        try
        {
            string xllDirectory  = Path.GetDirectoryName(@"C:/Users/myname/Documents/SharpDevelop Projects/IronPythonExcelDNATest/MyAddIn/bin/Debug/");
            string dllPath = Path.Combine(xllDirectory,"MyClass.dll");
            Assembly myclass = Assembly.LoadFile(dllPath);
            ScriptEngine pyEngine = Python.CreateEngine();
            pyEngine.Runtime.LoadAssembly(myclass);
            ScriptScope pyScope = pyEngine.Runtime.ImportModule("MyClass");
            object myClass = pyEngine.Operations.Invoke(pyScope.GetVariable("MyClass"));
            IronTest.AddSomeStuff = pyEngine.Operations.GetMember>(myClass, "AddSomeStuff");
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }
    }
    public void AutoClose()
    {
    }
}

public class IronTest
{
    public static Func AddSomeStuff;
    public static double TestIPAdd(double val1, double val2)
    {
        try
        {
            return AddSomeStuff(val1, val2);
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
            return double.NaN;
        }
    }
}

MyClass.py

class MyClass:
    def __init__(self):
        pass

    def AddSomeStuff(self,x,y):
        return x + y

5
задан oob 15 March 2011 в 00:13
поделиться