Почему "Наследует Microsoft.Web.Services2.WebServicesClientProtocol" убивает сборку
Я пытаюсь написать надстройку Outlook в Visual Basic (в Visual Studio 2012 Professional для Windows 7), которая будет взаимодействовать с веб-службой, которую мы используем на работе. К сожалению, этот конкретный веб-сервис на самом деле не идет в ногу со временем и, как таковой, требует веб-ссылки для реализации Microsoft.Web.Services2.WebServicesClientProtocol для выполнения определенных задач. Когда я изменяю сгенерированный Reference.vb для наследования этого класса вместо значения по умолчанию и Rebuild All, сборка завершается с сообщением:
------ Перестроить все началось: Проект: OutlookAddIn1, Конфигурация: Отладка любого процессора ------ OutlookAddIn1 -> \\nas01\my-home$\chq-andrewt\Visual Studio 2012\Projects\OutlookAddIn1\OutlookAddIn1\bin\Debug\OutlookAddIn1.dll C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: ошибка "FindRibbons" "задача неожиданно провалилась. C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: System.IO.FileNotFoundException: не удалось загрузить файл или сборка 'OutlookAddIn1, версия =1.0.0.0, культура = нейтральная, PublicKeyToken=null' или одна из ее зависимостей. Система не может найти указанный файл. C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: имя файла: 'OutlookAddIn1, версия =1.0.0.0, Культура = нейтральная, PublicKeyToken=null' C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: в системе.Reflection.RuntimeAssembly..0 \ OfficeTools \ Microsoft. Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: в System.Reflection.RuntimeAssembly.InternalLoadAssemblyName (AssemblyName assemblyRef, Evolution AssemblySecurity, reqAssembly RuntimeAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Булево throwOnFileNotFound, логическое значение для \\ \.VisualStudio. MSBuild \ Microsoft \ VisualStudio \ v11.0 \ OfficeTools \ Microsoft.VisualStudio.Tools.Office.targets (176,9): ошибка MSB4018: в System.Reflection.RuntimeAssembly.InternalLoad (String assemblyStr ing, Evidence AssemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ OfficeTools \ Microsoft.VisualStudio.Tools.Office.targets (176,9): ошибка MSB4018: в System.Reflection.Assembly.Load (String assemblyString) C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ OfficeTools \ Microsoft.VisualStudio.Tools.Office.targets (176,9): ошибка MSB4018: at System.UnitySerializationHolder.GetRealObject (контекст StreamingContext) C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ OfficeTools \ Microsoft.VisualStudio.Tools.Office.targets (176,9): ошибка MSB4018: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: в Microsoft.Build.Framework.ITask.Execute () C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ OfficeTools \ Microsoft.VisualStudio.Tools.Office.targets (176,9): ошибка MSB4018: в Microsoft.Build.BackEnd.TaskExecutionHo st.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute () C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ OfficeTools \ Microsoft.VisualStudio.Tools.Office.targets (176,9): ошибка MSB4018: в Microsoft.Build.BackEnd.TaskBuilder.d__20.MoveNext () C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ OfficeTools \ Microsoft.VisualStudio.Tools.Office.targets (176,9): ошибка MSB4018: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: === Предварительная привязка информация о состоянии === C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ OfficeTools \ Microsoft.VisualStudio.Tools.Office.targets (176,9): ошибка MSB4018: LOG: DisplayName = OutlookAddIn1, Версия =1.0.0.0, Культура = нейтральная, PublicKeyToken = null C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ OfficeTools \ Microsoft.VisualStudio.Tools.Office.targets (176,9): ошибка MSB4018: (полностью указано) C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudi o \ v11.0 \ OfficeTools \ Microsoft.VisualStudio.Tools.Office.targets (176,9): ошибка MSB4018: LOG: Appbase = file:///C:/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE/ C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: LOG: Initial PrivatePath = NULL C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: вызов сборки: (неизвестно). C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: === C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: LOG: это связывание начинается в контексте загрузки по умолчанию. C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: LOG: использование файла конфигурации приложения: C:\Users\chq-andrewt\AppData\Local\Microsoft\VisualStudio\11.0\devenv.exe.config C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: LOG: Использование файла конфигурации хоста: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: LOG: использование файла конфигурации компьютера из C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config. C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: LOG: политика не применяется в настоящее время для ссылки (частная, пользовательская, частичная или привязка на основе местоположения). C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: LOG: такая же привязка была замечена ранее и была не удалось с hr = 0x80070002. C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(176,9): ошибка MSB4018: ========== Перестроить Все: 0 выполнено, 1 не выполнено, 0 пропущено ==========
Я обнаружил, что сбой не происходит из-за конкретного изменения в Reference.vb. Я могу последовательно воспроизвести это, если я создам новый проект надстройки Outlook 2013, создаю новый класс и он наследует Microsoft.Web.Services2.WebServicesClientProtocol:
Публичный класс Class1 Унаследует Microsoft.Web.Services2.WebServicesClientProtocol Конечный класс
После того, как я внес это изменение, я добавляю Microsoft.Web.Services2.dll в проект References и после некоторого запроса System.Web.Services.dll. Я перестраиваю все и быстро получаю вышеуказанную ошибку.
Я обнаружил, что если я использую Microsoft.Web.Services3.WebServicesClientProtocol вместо этого работает нормально.
Это мой первый проект на Visual Basic (и любой проект, использующий инструменты Microsoft, в этом отношении), поэтому я могу упустить что-то до боли очевидное. Выбор использовать этот веб-сервис (и WSE2 по расширению) не был моим выбором; Я пытаюсь взаимодействовать с тем, что уже купили другие.
Я переустановил Visual Studio без удачи.
Любые намеки на то, почему это происходит или как решить эту проблему немного больше? Заранее спасибо!
1 ответ
Оказывается, WSE 2 просто слишком стар. Он поддерживает только.NET Framework до версии 2, поэтому я думаю, что это было танкованием. Я использую 4.5 (может быть только 4), так как я писал надстройку для Outlook 2013. Поскольку встроенных функциональных возможностей для создания SOAP-вложений вообще не существует, я закончил размещать необработанное SOAP-сообщение вручную, так как это было бесплатное и довольно простое решение.
Никаких комментариев о том, насколько она устойчива и перспективна...
Public Shared Sub createAttachment(uploadPath As String, fileName As String, ticketHandle As String, description As String)
Dim fInfo As New FileInfo(uploadPath)
Dim numBytes As Long = fInfo.Length
Dim fStream As New FileStream(uploadPath, FileMode.Open, FileAccess.Read)
Dim br As New BinaryReader(fStream)
Dim data As Byte() = br.ReadBytes(CInt(numBytes))
br.Close()
fStream.Close()
Dim boundary As String = "Part_3_4083017.1413597427118"
' Set the 'Method' property of the 'Webrequest' to 'POST'.
Dim myHttpWebRequest As HttpWebRequest = CType(WebRequest.Create("http://soapserver:8080/axis/services/USD_R11_WebService"), HttpWebRequest)
myHttpWebRequest.Method = "POST"
myHttpWebRequest.UserAgent = "Jakarta Commons-HttpClient/3.1"
myHttpWebRequest.Host = "soapserver:8080"
myHttpWebRequest.ContentType = "multipart/related; type=""text/xml""; start=""<rootpart@soapui.org>""; boundary=""----=_" & boundary & """"
Dim myWebHeaderCollection As WebHeaderCollection = myHttpWebRequest.Headers
myWebHeaderCollection.Add("MIME-Version: 1.0")
myWebHeaderCollection.Add("Accept-Encoding: gzip,deflate")
myWebHeaderCollection.Add("SOAPAction:""""")
'myWebHeaderCollection.Add("Expect:100-continue")
Dim inputData As String = Console.ReadLine()
Dim postData As New StringBuilder()
postData.Append("------=_" & boundary & vbCrLf)
postData.Append("Content-Type: text/xml; charset=UTF-8" & vbCrLf)
postData.Append("Content-Transfer-Encoding: 8bit" & vbCrLf)
postData.Append("Content-ID: <rootpart@soapui.org>" & vbCrLf)
postData.Append("" & vbCrLf)
postData.Append("<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:ser=""http://www.vendorurl.com/TheirProduct"">")
postData.Append("<soapenv:Header/>")
postData.Append("<soapenv:Body>")
postData.Append("<ser:createAttachment>")
postData.Append("<sid>" & sid & "</sid>")
postData.Append("<repositoryHandle>" & getRepositoryHandle() & "</repositoryHandle>")
postData.Append("<objectHandle>" & ticketHandle & "</objectHandle>")
postData.Append("<description>" & description & "</description>")
postData.Append("<fileName>" & uploadPath & "</fileName>")
postData.Append("</ser:createAttachment>")
postData.Append("</soapenv:Body>")
postData.Append("</soapenv:Envelope>" & vbCrLf)
postData.Append("------=_" & boundary & vbCrLf)
postData.Append("Content-Type: image/x-png; name=" & fileName & vbCrLf)
postData.Append("Content-Transfer-Encoding: binary" & vbCrLf)
postData.Append("Content-ID: <" & fileName & ">" & vbCrLf)
postData.Append("Content-Disposition: attachment; name=""" & fileName & """; filename=""" & fileName & """" & vbCrLf)
postData.Append("" & vbCrLf)
Dim encoding As New UTF8Encoding()
Dim header As Byte() = encoding.GetBytes(postData.ToString)
Dim tail As Byte() = encoding.GetBytes(vbCrLf & "------=_" & boundary & "--")
myHttpWebRequest.ContentLength = header.Length + data.Length + tail.Length
Dim newStream As Stream = myHttpWebRequest.GetRequestStream()
newStream.Write(header, 0, header.Length)
newStream.Write(data, 0, data.Length)
newStream.Write(tail, 0, tail.Length)
newStream.Close()
Try
Dim response = myHttpWebRequest.GetResponse()
Dim s As Stream = response.GetResponseStream()
Dim sr As New StreamReader(s)
Dim Content As String = sr.ReadToEnd()
'Could parse Content to get the handler for our new attachment
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub