public void AddContent(PartInfo rel, Stream sourceStream) { PartInfo parentPart = GetPart(rel.RelatedTo); PartInfo clonedPart = new PartInfo(this, rel); string sContentType; if (ContentIsInternalType(rel.Type)) { sContentType = rel.GetContentType(); clonedPart.Target = RemoveLeadingSlash(clonedPart.Target); parentPart.AddRelatedItem(clonedPart); if (m_partsMap.ContainsKey(clonedPart.AbsolutePath()) && sourceStream == null) { // we have already added this content via a relationship elsewhere, don't need to write it return; } m_partsMap.Add(clonedPart.AbsolutePath(), clonedPart); if (sourceStream != null) { string partName = clonedPart.AbsolutePath(); AddZipEntry(partName, sourceStream); if (rel.ContentTypeOverriden()) m_contentTypes.Add("/" + partName, sContentType); } } else {//we should only get here for external rels - so there should never be an additional stream to add parentPart.AddRelatedItem(clonedPart); sContentType = rel.Type; if (m_partsMap.ContainsKey(clonedPart.Target)) { // we have already added this content via a relationship elsewhere, don't need to write it return; } m_partsMap.Add(clonedPart.Target, clonedPart); if (sourceStream != null) { throw new System.InvalidOperationException("Sourcestream is not null for supposedly external hyperlink part"); } } }