Skip to content

Commit 38983e6

Browse files
committed
Updated assembly resolver to filter out script dll
1 parent 11794db commit 38983e6

6 files changed

Lines changed: 36 additions & 10 deletions

File tree

src/ScriptCs.Contracts/IAssemblyResolver.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ namespace ScriptCs.Contracts
44
{
55
public interface IAssemblyResolver
66
{
7-
IEnumerable<string> GetAssemblyPaths(string path);
7+
IEnumerable<string> GetAssemblyPaths(string path, string scriptName);
88
}
99
}

src/ScriptCs.Core/AssemblyResolver.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,31 +32,33 @@ public AssemblyResolver(
3232
_assemblyUtility = assemblyUtility;
3333
}
3434

35-
public IEnumerable<string> GetAssemblyPaths(string path)
35+
public IEnumerable<string> GetAssemblyPaths(string path, string scriptName)
3636
{
3737
Guard.AgainstNullArgument("path", path);
3838

3939
List<string> assemblies;
4040
if (_assemblyPathCache.TryGetValue(path, out assemblies)) return assemblies;
4141

4242
var packageAssemblies = GetPackageAssemblies(path);
43-
var binAssemblies = GetBinAssemblies(path);
43+
var binAssemblies = GetBinAssemblies(path, scriptName);
4444

4545
assemblies = packageAssemblies.Union(binAssemblies).ToList();
4646
_assemblyPathCache.Add(path, assemblies);
4747

4848
return assemblies;
4949
}
5050

51-
private IEnumerable<string> GetBinAssemblies(string path)
51+
private IEnumerable<string> GetBinAssemblies(string path, string scriptName)
5252
{
5353
var binFolder = Path.Combine(path, Constants.BinFolder);
5454
if (!_fileSystem.DirectoryExists(binFolder))
5555
return Enumerable.Empty<string>();
5656

57+
var dllName = scriptName.Replace(Path.GetExtension(scriptName), ".dll");
58+
5759
var assemblies = _fileSystem.EnumerateFiles(binFolder, "*.dll")
5860
.Union(_fileSystem.EnumerateFiles(binFolder, "*.exe"))
59-
.Where(_assemblyUtility.IsManagedAssembly)
61+
.Where(f => _assemblyUtility.IsManagedAssembly(f) && !dllName.Equals(Path.GetFileName(f)))
6062
.ToList();
6163

6264
foreach (var assembly in assemblies)

src/ScriptCs.Engine.Roslyn/RoslynScriptDllGeneratorEngine.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ protected override Assembly LoadAssembly(byte[] exeBytes, byte[] pdbBytes)
2929

3030
var dllName = FileName.Replace(Path.GetExtension(FileName), ".dll");
3131
var dllPath = Path.Combine(this.BaseDirectory, dllName);
32+
3233
_fileSystem.WriteAllBytes(dllPath, exeBytes);
3334

3435
_logger.DebugFormat("Loading assembly {0}.", dllPath);

src/ScriptCs/Command/ExecuteReplCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public CommandResult Execute()
5151
var repl = new Repl(_scriptArgs, _fileSystem, _scriptEngine, _logger, _console, _filePreProcessor);
5252

5353
var workingDirectory = _fileSystem.CurrentDirectory;
54-
var assemblies = _assemblyResolver.GetAssemblyPaths(workingDirectory);
54+
var assemblies = _assemblyResolver.GetAssemblyPaths(workingDirectory, string.Empty);
5555
var scriptPacks = _scriptPackResolver.GetPacks();
5656

5757
repl.Initialize(assemblies, scriptPacks);

src/ScriptCs/Command/ExecuteScriptCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public CommandResult Execute()
4848
var workingDirectory = _fileSystem.GetWorkingDirectory(_script);
4949
if (workingDirectory != null)
5050
{
51-
assemblyPaths = _assemblyResolver.GetAssemblyPaths(workingDirectory);
51+
assemblyPaths = _assemblyResolver.GetAssemblyPaths(workingDirectory, _script);
5252
}
5353
_scriptExecutor.Initialize(assemblyPaths, _scriptPackResolver.GetPacks());
5454
var result = _scriptExecutor.Execute(_script, ScriptArgs);

test/ScriptCs.Core.Tests/AssemblyResolverTests.cs

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public void ShouldReturnAssembliesFromPackagesFolder()
3434

3535
var resolver = new AssemblyResolver(fileSystem.Object, packageAssemblyResolver.Object, Mock.Of<IAssemblyUtility>(), Mock.Of<ILog>());
3636

37-
var assemblies = resolver.GetAssemblyPaths(WorkingDirectory).ToList();
37+
var assemblies = resolver.GetAssemblyPaths(WorkingDirectory, "script.csx").ToList();
3838

3939
assemblies.Count.ShouldEqual(1);
4040
assemblies[0].ShouldEqual(assemblyFile);
@@ -57,7 +57,7 @@ public void ShouldReturnAssembliesFromBinFolder()
5757

5858
var resolver = new AssemblyResolver(fileSystem.Object, Mock.Of<IPackageAssemblyResolver>(), assemblyUtility.Object, Mock.Of<ILog>());
5959

60-
var assemblies = resolver.GetAssemblyPaths(WorkingDirectory).ToList();
60+
var assemblies = resolver.GetAssemblyPaths(WorkingDirectory, "script.csx").ToList();
6161

6262
assemblies.Count.ShouldEqual(1);
6363
assemblies[0].ShouldEqual(assemblyFile);
@@ -82,11 +82,34 @@ public void ShouldNotReturnNonManagedAssemblies()
8282

8383
var resolver = new AssemblyResolver(fileSystem.Object, Mock.Of<IPackageAssemblyResolver>(), assemblyUtility.Object, Mock.Of<ILog>());
8484

85-
var assemblies = resolver.GetAssemblyPaths(WorkingDirectory).ToList();
85+
var assemblies = resolver.GetAssemblyPaths(WorkingDirectory, "script.csx").ToList();
8686

8787
assemblies.Count.ShouldEqual(1);
8888
assemblies[0].ShouldEqual(managed);
8989
}
90+
91+
[Fact]
92+
public void ShouldNotReturnScriptDll()
93+
{
94+
const string WorkingDirectory = @"C:\";
95+
96+
var binFolder = Path.Combine(WorkingDirectory, "bin");
97+
var scriptDll = Path.Combine(binFolder, "script.dll");
98+
99+
var fileSystem = new Mock<IFileSystem>();
100+
fileSystem.Setup(x => x.DirectoryExists(binFolder)).Returns(true);
101+
fileSystem.Setup(x => x.EnumerateFiles(binFolder, It.IsAny<string>(), SearchOption.AllDirectories))
102+
.Returns(new[] { scriptDll });
103+
104+
var assemblyUtility = new Mock<IAssemblyUtility>();
105+
assemblyUtility.Setup(x => x.IsManagedAssembly(scriptDll)).Returns(true);
106+
107+
var resolver = new AssemblyResolver(fileSystem.Object, Mock.Of<IPackageAssemblyResolver>(), assemblyUtility.Object, Mock.Of<ILog>());
108+
109+
var assemblies = resolver.GetAssemblyPaths(WorkingDirectory, "script.csx").ToList();
110+
111+
assemblies.Count.ShouldEqual(0);
112+
}
90113
}
91114
}
92115
}

0 commit comments

Comments
 (0)