.NET 4.0 베타 2에서 PIA Imbedding이 고장 났습니까?
-
22-07-2019 - |
문제
얼마 전, 나는 Visual Studio Beta 1에 몇 가지 Word Interop 예제를 작성하고 Microsoft.Office.Interop.Word
내장 (참조 속성에서 "Embed Interop 유형"= true를 설정). 이것들은 잘 작동했고, 나는 잠시 동안 그들을 달리지 않았습니다 ... 오늘까지.
물론, 지금은 Visual Studio 2010과 .NET 4.0의 베타 2에서 실행 중이며 다소 깨진 것 같습니다.
다음은 해당 코드입니다 (단지 더미 예제 코드) :
using Microsoft.Office.Interop.Word;
class WordImprovement1
{
static void Main()
{
Application app = new Application { Visible = true };
app.Documents.Add();
Document doc = app.ActiveDocument;
Paragraph para = doc.Paragraphs.Add();
para.Range.Text = "Thank goodness for C# 4";
object filename = "demo.doc";
object format = WdSaveFormat.wdFormatDocument97;
doc.SaveAs(FileName: ref filename, FileFormat: ref format);
doc.Close();
app.Quit();
}
}
내가 얻는 예외는 다음과 같습니다 대부분 당시 "Embed Interop 유형"이 "true"로 설정되거나 명령 줄에서 "/l"과 연결되는 경우
System.MissingMethodException: Method not found:
'Void Microsoft.Office.Interop.Word._Application.set_Visible(Boolean)'.
at WordImprovement1.Main()
매우 가끔 작동합니다. 더 기괴합니다.
"Inved Interop 유형"을 "false"(또는 /l 대신 명령 줄에서 /r)로 설정하면 모두 정상적으로 작동합니다.
"Visive = true"속성 세터를 제거하면 작동합니다 ... 그러나 나는 알다 그 재산은 거기에 있습니다 ... 그것은 심지어 Intellisense가 제안합니다!
여러 상자에서 철저한 테스트를 수행하지는 않았지만 ~할 수 있다 내 넷북 (Vista 대신 Windows 7을 실행하지만 여전히 .NET 4.0 베타 2)이 동일한 문제를 확인하는지 확인하십시오.
깨진 것이 나인지 .NET 4.0 베타 2인지에 대한 제안이 있습니까?
해결책
큰 캐치! 이것은 인덱스 속성에 대한 코드 생성의 버그처럼 보입니다 (알려진 속성이 아님을보고 해 주셔서 감사합니다!). VS 2010의 최신 내부 빌드를 시도했으며 재현했습니다.
객체 이니셜 라이저를 사용하면 다음 코드가 생성됩니다.
Application <>g__initLocal19 = (Application) Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("000209FF-0000-0000-C000-000000000046")));
<>g__initLocal19.set_Visible(true);
그러나 객체 이니셜 라이저가없는 별도의 명령문에서 visive = true를 설정하면 다음 코드가 방출됩니다.
Application application = (Application) Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("000209FF-0000-0000-C000-000000000046")));
application.Visible = true;
PIA는 하단을 정의하므로 객체 이니셜 라이저를 사용할 때 실패합니다. 현재의 해결 방법은 잘 작동하는 별도의 진술로 가시를 설정하는 것입니다.
나는 이것에 대한 버그를 기록했다. 다시 한 번 감사드립니다!