У меня есть COM-сборка (назовем это com1.dll), на которую я ссылаюсь в некотором коде C #. Когда я добавляю ссылку, я вижу Interop.com1.dll в узле "Ссылки". Если я выполню приложение из Visual Studio, следующий код будет работать нормально.
public void DoStuff()
{
var customer = new com1.Customer();
customer.DoSomething();
}
Затем я запускаю свой скрипт сборки, выполняя следующее nAnt:
<tlbimp output="Interop.com1.dll" typelib="com1.dll" namespace="com1"/>
и
<csc output="myapp.exe" target="winexe" debug="true">
<sources>
...
</sources>
<references>
<include name="Interop.com1.dll"/>
...
</references>
</csc>
Когда я выполняю сборку, сгенерированную из скрипта сборки, в строке кода var customer = new com1.Customer();
произойдет ошибка со следующей трассировкой стека:
System.Runtime.Serialization.SerializationException: The input stream is not a valid binary format. The starting contents (in bytes) are: 44-65-76-45-78-70-72-65-73-73-2E-58-74-72-61-45-64 ...
at System.Runtime.Serialization.Formatters.Binary.SerializationHeaderRecord.Read(__BinaryParser input)
at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadSerializationHeaderRecord()
at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream)
at System.ComponentModel.Design.DesigntimeLicenseContextSerializer.Deserialize(Stream o, String cryptoKey, RuntimeLicenseContext context)
at System.ComponentModel.Design.RuntimeLicenseContext.GetSavedLicenseKey(Type type, Assembly resourceAssembly)
at System.ComponentModel.LicenseManager.LicenseInteropHelper.GetCurrentContextInfo(Int32& fDesignTime, IntPtr& bstrKey, RuntimeTypeHandle rth)
at MyApp.MyClass.DoStuff()
Мой вопрос: кто-нибудь знает почему?