OSX で Mono を使用してDocXを実行しようとしています。最近のビルド、バージョン 3.2.1 を使用しています。xbuild でのビルドは成功しますが、Hello World の例は実行時に失敗します。
基本的に、populate document 関数 (以下の抜粋):
public static DocX Create(string filename) {
switch (rel.RelationshipType)
{
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes":
document.endnotesPart = package.GetPart(new Uri("/word/" + rel.TargetUri.OriginalString.Replace("/word/", ""), UriKind.RelativeOrAbsolute));
using (TextReader tr = new StreamReader(document.endnotesPart.GetStream()))
document.endnotes = XDocument.Load(tr);
break;
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes":
document.footnotesPart = package.GetPart(new Uri("/word/" + rel.TargetUri.OriginalString.Replace("/word/", ""), UriKind.RelativeOrAbsolute));
using (TextReader tr = new StreamReader(document.footnotesPart.GetStream()))
document.footnotes = XDocument.Load(tr);
break;
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles":
document.stylesPart = package.GetPart(new Uri("/word/" + rel.TargetUri.OriginalString.Replace("/word/", ""), UriKind.RelativeOrAbsolute));
using (TextReader tr = new StreamReader(document.stylesPart.GetStream()))
document.styles = XDocument.Load(tr);
break;
case "http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects":
document.stylesWithEffectsPart = package.GetPart(new Uri("/word/" + rel.TargetUri.OriginalString.Replace("/word/", ""), UriKind.RelativeOrAbsolute));
using (TextReader tr = new StreamReader(document.stylesWithEffectsPart.GetStream()))
document.stylesWithEffects = XDocument.Load(tr);
break;
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable":
document.fontTablePart = package.GetPart(new Uri("/word/" + rel.TargetUri.OriginalString.Replace("/word/", ""), UriKind.RelativeOrAbsolute));
using (TextReader tr = new StreamReader(document.fontTablePart.GetStream()))
document.fontTable = XDocument.Load(tr);
break;
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering":
document.numberingPart = package.GetPart(new Uri("/word/" + rel.TargetUri.OriginalString.Replace("/word/", ""), UriKind.RelativeOrAbsolute));
using (TextReader tr = new StreamReader(document.numberingPart.GetStream()))
document.numbering = XDocument.Load(tr);
break;
default:
break;
}
次のエラーで失敗します:
Unhandled Exception:
System.ArgumentException: partUri
Parameter name: Absolute URIs are not supported
at System.IO.Packaging.Check.PartUri (System.Uri partUri) [0x00000] in <filename unknown>:0
at System.IO.Packaging.Package.GetPart (System.Uri partUri) [0x00000] in <filename unknown>:0
at Novacode.DocX.PopulateDocument (Novacode.DocX document, System.IO.Packaging.Package package) [0x00000] in <filename unknown>:0
at Novacode.DocX.PostLoad (System.IO.Packaging.Package& package) [0x00000] in <filename unknown>:0
at Novacode.DocX.Load (System.IO.Stream stream) [0x00000] in <filename unknown>:0
at Novacode.DocX.Create (System.String filename) [0x00000] in <filename unknown>:0
Novacode は名前空間です。
CS/Mono の初心者である私には、なぜ問題が発生するのか、また、なぜ出力がより正確な場所を詳細に示さないのかがわかりません (デフォルトではデバッグ ビルドです)。