diff --git a/src/Sign.Core/Tools/VsixSignTool/OpcPart.cs b/src/Sign.Core/Tools/VsixSignTool/OpcPart.cs
index fe29ae8e..e7456eb0 100644
--- a/src/Sign.Core/Tools/VsixSignTool/OpcPart.cs
+++ b/src/Sign.Core/Tools/VsixSignTool/OpcPart.cs
@@ -60,7 +60,10 @@ public string ContentType
{
var extension = Path.GetExtension(_path)?.TrimStart('.');
- return Package.ContentTypes.FirstOrDefault(ct => string.Equals(ct.Extension, extension, StringComparison.OrdinalIgnoreCase))?.ContentType ?? OpcKnownMimeTypes.OctetString;
+ var defaultContentType = Package.ContentTypes.FirstOrDefault(ct => string.Equals(ct.Extension, extension, StringComparison.OrdinalIgnoreCase));
+ var overrideContentType = Package.ContentTypes.FirstOrDefault(ct => string.Equals(ct.PartName?.Trim('/'), _path, StringComparison.OrdinalIgnoreCase));
+
+ return overrideContentType?.ContentType ?? defaultContentType?.ContentType ?? OpcKnownMimeTypes.OctetString;
}
}
@@ -111,4 +114,4 @@ private OpcRelationships ConstructRelationships()
///
public override int GetHashCode() => Uri.GetHashCode();
}
-}
\ No newline at end of file
+}
diff --git a/test/Sign.Core.Test/TestAssets/VSIXSamples/OpenVsixSignToolTest-Overrides.vsix b/test/Sign.Core.Test/TestAssets/VSIXSamples/OpenVsixSignToolTest-Overrides.vsix
new file mode 100644
index 00000000..7b243bcd
Binary files /dev/null and b/test/Sign.Core.Test/TestAssets/VSIXSamples/OpenVsixSignToolTest-Overrides.vsix differ
diff --git a/test/Sign.Core.Test/Tools/VSIXSignTool/OpcPackageTests.cs b/test/Sign.Core.Test/Tools/VSIXSignTool/OpcPackageTests.cs
index 70412630..c0398721 100644
--- a/test/Sign.Core.Test/Tools/VSIXSignTool/OpcPackageTests.cs
+++ b/test/Sign.Core.Test/Tools/VSIXSignTool/OpcPackageTests.cs
@@ -7,6 +7,7 @@ namespace Sign.Core.Test
public class OpcPackageTests : IDisposable
{
private static readonly string SamplePackage = Path.Combine(".", "TestAssets", "VSIXSamples", "OpenVsixSignToolTest.vsix");
+ private static readonly string SamplePackageWithOverrides = Path.Combine(".", "TestAssets", "VSIXSamples", "OpenVsixSignToolTest-Overrides.vsix");
private static readonly string SamplePackageSigned = Path.Combine(".", "TestAssets", "VSIXSamples", "OpenVsixSignToolTest-Signed.vsix");
private readonly List _shadowFiles = new List();
@@ -187,6 +188,24 @@ public void ShouldReturnSignatureForSignedPackage()
}
}
+ [Fact]
+ public void ShouldHonorContentTypeIfOverrideIsListedInContentTypesFile()
+ {
+ string path;
+ using (var package = ShadowCopyPackage(SamplePackageWithOverrides, out path, OpcPackageFileMode.ReadWrite))
+ {
+ var partToCheck = new Uri("/extension.vsixmanifest", UriKind.Relative);
+ var part = package.GetPart(partToCheck);
+ Assert.True(part != null && part.ContentType == "text/xml");
+ }
+ using (var package = OpcPackage.Open(path, OpcPackageFileMode.ReadWrite))
+ {
+ var partToCheck = new Uri("/extension.vsixmanifest", UriKind.Relative);
+ var part = package.GetPart(partToCheck);
+ Assert.True(part != null && part.ContentType == "text/xml");
+ }
+ }
+
private OpcPackage ShadowCopyPackage(string packagePath, out string path, OpcPackageFileMode mode = OpcPackageFileMode.Read)
{
var temp = Path.GetTempFileName();