Archestra Client Control Импорт DLL-файла
Итак, у меня есть Wonderware Archestra IDE 4.1. В основном последний и самый лучший это 2015 на сервере
У меня есть библиотека классов C# под названием WordControls, которая создается в Visual Studio 2015 на моем ноутбуке. Когда я его создаю, релиз представляет собой dll-файл с тем же именем.
Я копирую и вставляю файл dll в папку "Документы" на сервере, и это должно быть так же просто, как переместить мышь в верхний левый угол и перейти к следующему: Galaxy -> Import -> Client Control
И оттуда я выбираю свой файл DLL, который я создал, и нажимаю ОК. Затем снова нажмите Ok по умолчанию. И, наконец, он проходит через процесс импорта. За исключением того, что вместо импорта файла я получаю что-то немного другое:
"Обработка файла WordControls.dll.... Импортировано всего 0 объектов из 1 файла"
Не удается импортировать DLL, и я не знаю почему. Я делал это раньше в своей предыдущей работе над Archestra и Visual Studio 2013, поэтому я не могу понять, что сделал неправильно.
Кто-нибудь имел опыт работы с аспектом управления клиентом в Archestra IDE?
Когда я смотрю на регистратор SMC, я получаю эти два предупреждения:
Microsoft.Office.Interop.Word, версия =15.0.0.0, культура = нейтральная, PublicKeyToken=71e9bce111e9429c Зависимый файл не существует.
Элементы управления не найдены в C:\Users\vegeto18\Documents\WordControls.dll.
Я не уверен, что делать с первым предупреждением, кроме того факта, что моя программа использует Microsoft.Office.Interop.Word для работы с документами MS и что на сервере нет MS Office (терминальные серверы, развернутые с помощью Просмотр приложений Intouch).
Во второй части я не совсем уверен, как интерпретировать, поскольку именно там находится dll после того, как я скопирую ее с моего ноутбука и вставлю в эту папку.
Это был бы мой код:
using System;
using System.Windows.Forms;
using Microsoft.Office.Interop.Word;
using System.IO;
namespace WordControls
{
public partial class DocBrowser : Form
{
private System.Windows.Forms.WebBrowser webBrowser1;
delegate void ConvertDocumentDelegate(string fileName);
public DocBrowser()
{
InitializeComponent();
// Create the webBrowser control on the UserControl.
// This code was moved from the designer for cut and paste
// ease.
webBrowser1 = new System.Windows.Forms.WebBrowser();
webBrowser1.Dock = System.Windows.Forms.DockStyle.Fill;
webBrowser1.Location = new System.Drawing.Point(0, 0);
webBrowser1.MinimumSize = new System.Drawing.Size(20, 20);
webBrowser1.Name = "webBrowser1";
webBrowser1.Size = new System.Drawing.Size(532, 514);
webBrowser1.TabIndex = 0;
Controls.Add(webBrowser1);
// set up an event handler to delete our temp file when we're done with it.
webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
}
private void Form1_Load(object sender, EventArgs e)
{
var url = "http://qualityworkbench/ivscripts/qwbcgi.dll/docfetchraw?db=live&id=1090";
LoadDocument(url);
}
string tempFileName = null;
public void LoadDocument(string fileName)
{
// Call ConvertDocument asynchronously.
ConvertDocumentDelegate del = new ConvertDocumentDelegate(ConvertDocument);
// Call DocumentConversionComplete when the method has completed.
del.BeginInvoke(fileName, DocumentConversionComplete, null);
}
void ConvertDocument(string fileName)
{
object m = System.Reflection.Missing.Value;
object oldFileName = (object)fileName;
object readOnly = (object)false;
Microsoft.Office.Interop.Word.Application ac = null;
try
{
// First, create a new Microsoft.Office.Interop.Word.ApplicationClass.
ac = new Microsoft.Office.Interop.Word.Application();
// Now we open the document.
Document doc = ac.Documents.Open(ref oldFileName, ref m, ref readOnly,
ref m, ref m, ref m, ref m, ref m, ref m, ref m,
ref m, ref m, ref m, ref m, ref m, ref m);
// Create a temp file to save the HTML file to.
tempFileName = GetTempFile("html");
// Cast these items to object. The methods we're calling
// only take object types in their method parameters.
object newFileName = (object)tempFileName;
// We will be saving this file as HTML format.
object fileType = (object)WdSaveFormat.wdFormatHTML;
// Save the file.
doc.SaveAs(ref newFileName, ref fileType,
ref m, ref m, ref m, ref m, ref m, ref m, ref m,
ref m, ref m, ref m, ref m, ref m, ref m, ref m);
}
finally
{
// Make sure we close the application class.
if (ac != null)
ac.Quit(ref readOnly, ref m, ref m);
}
}
void DocumentConversionComplete(IAsyncResult result)
{
// navigate to our temp file.
webBrowser1.Navigate(tempFileName);
}
void webBrowser1_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
if (tempFileName != string.Empty)
{
// delete the temp file we created.
File.Delete(tempFileName);
// set the tempFileName to an empty string.
tempFileName = string.Empty;
}
}
string GetTempFile(string extension)
{
// Uses the Combine, GetTempPath, ChangeExtension,
// and GetRandomFile methods of Path to
// create a temp file of the extension we're looking for.
return Path.Combine(Path.GetTempPath(),
Path.ChangeExtension(Path.GetRandomFileName(), extension));
}
}
}
1 ответ
В моем коде не было ничего плохого, это был мой тип проекта. Я написал это в Visual Studio как приложение Window Forms. Я должен был использовать пользовательский контроль Window Forms. Это закончило тем, что решило мою проблему.