Skip to content

Commit f60d507

Browse files
fixes sinjection
Adds a workaround to test mono cecil
1 parent 4d7813c commit f60d507

File tree

3 files changed

+18
-9
lines changed

3 files changed

+18
-9
lines changed

Src/BridgeVs.Build/SInjection.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ internal class SInjection : IDisposable
4646
{
4747
#region [ Private Properties ]
4848
private readonly string _assemblyLocation;
49-
private readonly Stream _assemblyStream;
5049
private readonly ModuleDefinition _moduleDefinition;
5150

5251
private static readonly Func<string, bool> IsSystemAssembly = name => name.Contains("Microsoft") || name.Contains("System") || name.Contains("mscorlib");
@@ -92,10 +91,7 @@ public SInjection(string assemblyLocation, string snkCertificatePath = null)
9291
if (!FS.FileSystem.File.Exists(assemblyLocation))
9392
throw new Exception($"Assembly at location {assemblyLocation} doesn't exist");
9493

95-
_assemblyStream =
96-
FS.FileSystem.File.Open(assemblyLocation, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
97-
98-
_moduleDefinition = ModuleDefinition.ReadModule(_assemblyStream, GetReaderParameters());
94+
_moduleDefinition = ModuleDefinition.ReadModule(assemblyLocation, GetReaderParameters());
9995

10096
}
10197
#endregion
@@ -315,7 +311,7 @@ private bool WriteAssembly()
315311
{
316312
_moduleDefinition.Write(file, GetWriterParameters());
317313
}
318-
_assemblyStream?.Dispose();
314+
//_assemblyStream?.Dispose();
319315

320316
return true;
321317
}

Src/BridgeVs.VsPackage/Targets/Custom.After.Microsoft.Common.targets

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@
2424
<UsingTask TaskName="MapperBuildTask" AssemblyFile="$([MSBuild]::Unescape('$(InstallFolderPath)'))\BridgeVs.Build.dll" />
2525
<UsingTask TaskName="CleanBuildTask" AssemblyFile="$([MSBuild]::Unescape('$(InstallFolderPath)'))\BridgeVs.Build.dll" />
2626

27-
<Target Name="LINQBridgeAfterBuild" DependsOnTargets="CoreCompile" Condition="'True' == 'False'" >
27+
<Target Name="LINQBridgeAfterBuild" DependsOnTargets="CoreCompile" >
2828
<SInjectionBuildTask Assembly="@(MainAssembly->'%(FullPath)')" SolutionName="$(SolutionName)" VisualStudioVer="$(VisualStudioVersion)" Snk="$(MSBuildProjectDirectory)\$(AssemblyOriginatorKeyFile)" />
2929
<MapperBuildTask Assembly="@(MainAssembly->'%(FullPath)')" ProjectPath="$(MSBuildProjectFullPath)" SolutionName="$(SolutionName)" VisualStudioVer="$(VisualStudioVersion)" />
3030
</Target>
3131

32-
<Target Name="LINQBridgeAfterClean" DependsOnTargets="AfterClean" Condition="'True' == 'False'">
32+
<Target Name="LINQBridgeAfterClean" DependsOnTargets="AfterClean">
3333
<CleanBuildTask Assembly="$(AssemblyName)" SolutionName="$(SolutionName)" VisualStudioVer="$(VisualStudioVersion)"/>
3434
</Target>
3535

Test/BridgeVs.UnitTest/Build/Tasks/SInjectionBuildTest.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using BridgeVs.Shared.Common;
66
using BridgeVs.UnitTest.Model;
77
using Microsoft.VisualStudio.TestTools.UnitTesting;
8+
using Mono.Cecil;
89
using TypeMock.ArrangeActAssert;
910
using FS = BridgeVs.Shared.FileSystem.FileSystemFactory;
1011

@@ -17,7 +18,7 @@ public class SInjectionBuildTest
1718
private static string AssemblyToInjectLocation => typeof(CustomType1).Assembly.Location;
1819
private static byte[] AssemblyToInjectBytes => File.ReadAllBytes(AssemblyToInjectLocation);
1920

20-
21+
2122
private static readonly MockFileSystem MockFileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
2223
{
2324
{ AssemblyToInjectLocation, new MockFileData(AssemblyToInjectBytes) }
@@ -29,6 +30,18 @@ public void Init()
2930
{
3031
Isolate.WhenCalled(() => FS.FileSystem).WillReturn(MockFileSystem);
3132

33+
object[] args =
34+
{
35+
AssemblyToInjectLocation, FileMode.Open, FileAccess.ReadWrite,
36+
FileShare.Read
37+
};
38+
Stream access = FS.FileSystem.File.Open(AssemblyToInjectLocation, FileMode.Open, FileAccess.Read,
39+
FileShare.ReadWrite);
40+
41+
Isolate.NonPublic.WhenCalled(typeof(ModuleDefinition), "GetFileStream")
42+
.WithExactArguments(args)
43+
.WillReturn(access);
44+
3245
Isolate.WhenCalled(() => CommonRegistryConfigurations.IsSolutionEnabled("", "")).WillReturn(true);
3346
Isolate.WhenCalled(() => CommonRegistryConfigurations.Map3RdPartyAssembly("", "")).WillReturn(false);
3447
Isolate.WhenCalled(() => CommonRegistryConfigurations.IsErrorTrackingEnabled("")).WillReturn(false);

0 commit comments

Comments
 (0)