public void AddingBindingRedirectToEmptyConfig()
        {
            // Arrange
            var mockFileSystem = new MockFileSystem();

            mockFileSystem.AddFile("config", @"<configuration></configuration>");

            var             bindingRedirectManager = new BindingRedirectManager(mockFileSystem, "config");
            AssemblyBinding assemblyBinding        = GetAssemblyBinding("AssemblyName", "token", "3.0.0.0");

            // Act
            bindingRedirectManager.AddBindingRedirects(new[] { assemblyBinding });

            // Assert
            string outputContent = mockFileSystem.OpenFile("config").ReadToEnd();

            Assert.Equal(@"<?xml version=""1.0"" encoding=""utf-8""?>
<configuration>
  <runtime>
    <assemblyBinding xmlns=""urn:schemas-microsoft-com:asm.v1"">
      <dependentAssembly>
        <assemblyIdentity name=""AssemblyName"" publicKeyToken=""token"" culture=""neutral"" />
        <bindingRedirect oldVersion=""0.0.0.0-3.0.0.0"" newVersion=""3.0.0.0"" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>", outputContent);
        }
        public void AddingBindingRedirectToEmptyConfig()
        {
            // Arrange
            var mockFileSystem = new Mock <IFileSystem>();

            mockFileSystem.Setup(m => m.FileExists("config")).Returns(true);
            mockFileSystem.Setup(m => m.OpenFile("config")).Returns(@"<configuration></configuration>".AsStream());
            var ms = new MemoryStream();

            mockFileSystem.Setup(m => m.AddFile("config", It.IsAny <Stream>())).Callback <string, Stream>((path, stream) => {
                stream.CopyTo(ms);
                ms.Seek(0, SeekOrigin.Begin);
            });

            var             bindingRedirectManager = new BindingRedirectManager(mockFileSystem.Object, "config");
            AssemblyBinding assemblyBinding        = GetAssemblyBinding("A", "key", "3.0.0.0");

            // Act
            bindingRedirectManager.AddBindingRedirects(new[] { assemblyBinding });

            // Assert
            Assert.AreEqual(@"<?xml version=""1.0"" encoding=""utf-8""?>
<configuration>
  <runtime>
    <assemblyBinding xmlns=""urn:schemas-microsoft-com:asm.v1"">
      <dependentAssembly>
        <assemblyIdentity name=""AssemblyName"" publicKeyToken=""token"" culture=""neutral"" />
        <bindingRedirect oldVersion=""0.0.0.0-3.0.0.0"" newVersion=""3.0.0.0"" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>", ms.ReadToEnd());
        }
Esempio n. 3
0
        public void CodeBase_WhenCodeBaseIsNull_InitializesPropertyToNull()
        {
            var binding = new AssemblyBinding(new AssemblyName("Gallio"));

            binding.CodeBase = null;

            Assert.IsNull(binding.CodeBase);
        }
Esempio n. 4
0
        public void CodeBase_WhenCodeBaseIsAnAbsoluteUri_InitializesPropertyToUri()
        {
            var binding  = new AssemblyBinding(new AssemblyName("Gallio"));
            var codeBase = new Uri("file:///c:/foo.dll");

            binding.CodeBase = codeBase;

            Assert.AreEqual(codeBase, binding.CodeBase);
        }
Esempio n. 5
0
        public void AddBindingRedirect_WhenBindingRedirectIsNotNull_AddsTheRedirect()
        {
            var binding = new AssemblyBinding(new AssemblyName("Gallio"));

            binding.AddBindingRedirect(new AssemblyBinding.BindingRedirect("1.2.3.4"));

            Assert.AreElementsEqual(new[] { new AssemblyBinding.BindingRedirect("1.2.3.4") },
                                    binding.BindingRedirects,
                                    (x, y) => x.OldVersion == y.OldVersion);
        }
Esempio n. 6
0
        public void QualifyPartialName_CanGetSet()
        {
            var binding = new AssemblyBinding(new AssemblyName("Gallio"));

            binding.QualifyPartialName = true;
            Assert.IsTrue(binding.QualifyPartialName);

            binding.QualifyPartialName = false;
            Assert.IsFalse(binding.QualifyPartialName);
        }
Esempio n. 7
0
        public void ApplyPublisherPolicy_CanGetSet()
        {
            var binding = new AssemblyBinding(new AssemblyName("Gallio"));

            binding.ApplyPublisherPolicy = true;
            Assert.IsTrue(binding.ApplyPublisherPolicy);

            binding.ApplyPublisherPolicy = false;
            Assert.IsFalse(binding.ApplyPublisherPolicy);
        }
        public void AddingBindingRedirectWithMultipleAssemblyBindingSectionsAddsToFirstOne()
        {
            // Arrange
            var mockFileSystem = new MockFileSystem();

            mockFileSystem.AddFile("config", @"
<configuration>
    <runtime>
        <assemblyBinding xmlns=""urn:schemas-microsoft-com:asm.v1"">
            <dependentAssembly>
                <assemblyIdentity name=""System.Web.Mvc"" publicKeyToken=""31bf3856ad364e35"" />
                <bindingRedirect oldVersion=""1.0.0.0"" newVersion=""2.0.0.0"" />
            </dependentAssembly>
        </assemblyBinding>
        <assemblyBinding xmlns=""urn:schemas-microsoft-com:asm.v1"">
            <dependentAssembly>
                <assemblyIdentity name=""A.Library"" publicKeyToken=""a34a755ec277222f"" />
                <bindingRedirect oldVersion=""1.0.0.0-2.0.0.0"" newVersion=""2.0.0.0"" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>");

            var             bindingRedirectManager = new BindingRedirectManager(mockFileSystem, "config");
            AssemblyBinding assemblyBinding        = GetAssemblyBinding("AssemblyName", "token", "3.0.0.0");

            // Act
            bindingRedirectManager.AddBindingRedirects(new[] { assemblyBinding });

            // Assert
            string outputContent = mockFileSystem.OpenFile("config").ReadToEnd();

            Assert.Equal(@"<?xml version=""1.0"" encoding=""utf-8""?>
<configuration>
    <runtime>
        <assemblyBinding xmlns=""urn:schemas-microsoft-com:asm.v1"">
            <dependentAssembly>
                <assemblyIdentity name=""System.Web.Mvc"" publicKeyToken=""31bf3856ad364e35"" />
                <bindingRedirect oldVersion=""1.0.0.0"" newVersion=""2.0.0.0"" />
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name=""AssemblyName"" publicKeyToken=""token"" culture=""neutral"" />
                <bindingRedirect oldVersion=""0.0.0.0-3.0.0.0"" newVersion=""3.0.0.0"" />
            </dependentAssembly>
        </assemblyBinding>
        <assemblyBinding xmlns=""urn:schemas-microsoft-com:asm.v1"">
            <dependentAssembly>
                <assemblyIdentity name=""A.Library"" publicKeyToken=""a34a755ec277222f"" />
                <bindingRedirect oldVersion=""1.0.0.0-2.0.0.0"" newVersion=""2.0.0.0"" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>", outputContent);
        }
Esempio n. 9
0
        public void Constructor_WhenAssemblyNotNull_InitializesProperties()
        {
            var assembly = GetType().Assembly;

            var assemblyReference = new AssemblyBinding(assembly);

            Assert.Multiple(() =>
            {
                Assert.AreEqual(assembly.GetName().FullName, assemblyReference.AssemblyName.FullName);
                Assert.AreEqual(assembly.CodeBase, assemblyReference.CodeBase.ToString());
                Assert.IsFalse(assemblyReference.QualifyPartialName);
                Assert.IsEmpty(assemblyReference.BindingRedirects);
                Assert.IsTrue(assemblyReference.ApplyPublisherPolicy);
            });
        }
Esempio n. 10
0
        public void Constructor_WhenAssemblyNameNotNull_InitializesProperties()
        {
            var assemblyName = new AssemblyName("Gallio");

            var assemblyReference = new AssemblyBinding(assemblyName);

            Assert.Multiple(() =>
            {
                Assert.AreSame(assemblyName, assemblyReference.AssemblyName);
                Assert.IsNull(assemblyReference.CodeBase);
                Assert.IsFalse(assemblyReference.QualifyPartialName);
                Assert.IsEmpty(assemblyReference.BindingRedirects);
                Assert.IsTrue(assemblyReference.ApplyPublisherPolicy);
            });
        }
Esempio n. 11
0
        public void CtorCopiesAssemblyProperties()
        {
            // Arrange
            var assembly = new Mock<IAssembly>();
            assembly.Setup(m => m.Name).Returns("AssemblyName");
            assembly.Setup(m => m.Culture).Returns("en-GB");
            assembly.Setup(m => m.PublicKeyToken).Returns("token");
            assembly.Setup(m => m.Version).Returns(new Version("1.0.0.0"));

            // Act
            var binding = new AssemblyBinding(assembly.Object);

            // Assert
            Assert.Equal("AssemblyName", binding.Name);
            Assert.Equal("en-GB", binding.Culture);
            Assert.Equal("token", binding.PublicKeyToken);
            Assert.Equal("1.0.0.0", binding.NewVersion);
            Assert.Equal("0.0.0.0-1.0.0.0", binding.OldVersion);
        }
        public void CtorCopiesAssemblyProperties()
        {
            // Arrange
            var assembly = new Mock <IAssembly>();

            assembly.Setup(m => m.Name).Returns("AssemblyName");
            assembly.Setup(m => m.Culture).Returns("en-GB");
            assembly.Setup(m => m.PublicKeyToken).Returns("token");
            assembly.Setup(m => m.Version).Returns(new Version("1.0.0.0"));

            // Act
            var binding = new AssemblyBinding(assembly.Object);

            // Assert
            Assert.Equal("AssemblyName", binding.Name);
            Assert.Equal("en-GB", binding.Culture);
            Assert.Equal("token", binding.PublicKeyToken);
            Assert.Equal("1.0.0.0", binding.NewVersion);
            Assert.Equal("0.0.0.0-1.0.0.0", binding.OldVersion);
        }
        public void AddBindingRedirectUpdatesElementsPreservingCommentsAndWhitespace()
        {
            // Arrange
            var mockFileSystem = new MockFileSystem();

            mockFileSystem.AddFile("config", @"<?xml version=""1.0"" encoding=""utf-8""?>
<configuration>
  <runtime>
    <assemblyBinding xmlns=""urn:schemas-microsoft-com:asm.v1"">
      <dependentAssembly><assemblyIdentity name=""AssemblyName"" publicKeyToken=""token"" culture=""neutral"" />
        <!-- This is a comment that should not be removed -->
        <bindingRedirect oldVersion=""2.0.0.0"" newVersion=""3.0.0.0"" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>");

            var             bindingRedirectManager = new BindingRedirectManager(mockFileSystem, "config");
            AssemblyBinding assemblyBinding        = GetAssemblyBinding("AssemblyName", "token", "4.0.0.0");

            // Act
            bindingRedirectManager.AddBindingRedirects(new[] { assemblyBinding });

            // Assert
            string outputContent = mockFileSystem.OpenFile("config").ReadToEnd();

            Assert.Equal(@"<?xml version=""1.0"" encoding=""utf-8""?>
<configuration>
  <runtime>
    <assemblyBinding xmlns=""urn:schemas-microsoft-com:asm.v1"">
      <dependentAssembly><assemblyIdentity name=""AssemblyName"" publicKeyToken=""token"" culture=""neutral"" />
        <!-- This is a comment that should not be removed -->
        <bindingRedirect oldVersion=""0.0.0.0-4.0.0.0"" newVersion=""4.0.0.0"" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>", outputContent);
        }
        public void ParseAssemblyBindingConfigSectionPreservesContent()
        {
            // Arrange
            string assemblyBindingXml = @"<assemblyBinding xmlns=""urn:schemas-microsoft-com:asm.v1"">
         <dependentAssembly>
            <assemblyIdentity name=""myAssembly""
                              publicKeyToken=""32ab4ba45e0a69a1""
                              culture=""neutral""
                              processorArchitecture=""x86"" />
            <bindingRedirect oldVersion=""0.0.0.1-1.0.0.0""
                             newVersion=""2.0.0.0""/>
            <codeBase version=""2.0.0.0""
                      href=""http://www.litwareinc.com/myAssembly.dll""/>
            <publisherPolicy apply=""no""/>
         </dependentAssembly>
      </assemblyBinding>";
            var    dependentAssembly  = XElement.Parse(assemblyBindingXml).Elements().First();

            // Act
            var binding = AssemblyBinding.Parse(dependentAssembly);

            // Assert
            Assert.Equal("myAssembly", binding.Name);
            Assert.Equal("32ab4ba45e0a69a1", binding.PublicKeyToken);
            Assert.Equal("neutral", binding.Culture);
            Assert.Equal("x86", binding.ProcessorArchitecture);
            Assert.Equal("0.0.0.1-1.0.0.0", binding.OldVersion);
            Assert.Equal("2.0.0.0", binding.NewVersion);
            Assert.Equal("2.0.0.0", binding.CodeBaseVersion);
            Assert.Equal("http://www.litwareinc.com/myAssembly.dll", binding.CodeBaseHref);
            Assert.Equal("no", binding.PublisherPolicy);
            Assert.Equal(@"<dependentAssembly xmlns=""urn:schemas-microsoft-com:asm.v1"">
  <assemblyIdentity name=""myAssembly"" publicKeyToken=""32ab4ba45e0a69a1"" culture=""neutral"" processorArchitecture=""x86"" />
  <bindingRedirect oldVersion=""0.0.0.1-1.0.0.0"" newVersion=""2.0.0.0"" />
  <publisherPolicy apply=""no"" />
  <codeBase href=""http://www.litwareinc.com/myAssembly.dll"" version=""2.0.0.0"" />
</dependentAssembly>", binding.ToString());
        }
Esempio n. 15
0
        /// <summary>
        /// Adds a binding to the configuration for the specified assembly.
        /// </summary>
        /// <remarks>
        /// <para>
        /// Depending on how the binding is configured, this method will add an assembly dependency
        /// record and possibly an assembly qualification record.
        /// </para>
        /// </remarks>
        /// <param name="assemblyBinding">The assembly binding.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="assemblyBinding"/> is null.</exception>
        public void AddAssemblyBinding(AssemblyBinding assemblyBinding)
        {
            if (assemblyBinding == null)
            {
                throw new ArgumentNullException("assemblyBinding");
            }

            AssemblyName assemblyName = assemblyBinding.AssemblyName;

            byte[] publicKeyTokenBytes = assemblyName.GetPublicKeyToken();
            string publicKeyToken      = publicKeyTokenBytes != null && publicKeyTokenBytes.Length != 0 ? ToHex(publicKeyTokenBytes) : null;

            if (assemblyBinding.QualifyPartialName && publicKeyToken != null)
            {
                AddAssemblyQualification(assemblyName.Name, assemblyName.FullName);
            }

            AssemblyDependency assemblyDependency = AddAssemblyDependency(
                assemblyName.Name,
                publicKeyToken,
                AssemblyUtils.GetAssemblyNameCulture(assemblyName),
                GetProcessorArchitectureName(assemblyName.ProcessorArchitecture));

            foreach (AssemblyBinding.BindingRedirect bindingRedirect in assemblyBinding.BindingRedirects)
            {
                assemblyDependency.AddAssemblyBindingRedirect(bindingRedirect.OldVersion, assemblyName.Version.ToString());
            }

            // Note: If unsigned assembly appears outside of appbase then we get an exception:
            //       "The private assembly was located outside the appbase directory."
            if (assemblyBinding.CodeBase != null && publicKeyToken != null)
            {
                assemblyDependency.AddAssemblyCodeBase(assemblyName.Version.ToString(), assemblyBinding.CodeBase.ToString());
            }

            assemblyDependency.ApplyPublisherPolicy = assemblyBinding.ApplyPublisherPolicy;
        }
Esempio n. 16
0
        private static void RemoveDuplicates(AssemblyBinding redirects)
        {
            var cleaned = new List<DependentAssembly>();
            var groups = redirects.DependentAssemblies.GroupBy(x => x.AssemblyIdentity.Name);
            foreach (var @group in groups)
            {
                Log(string.Format("Found {0} versions of {1}...", group.Count(), group.Key));
                if (group.Count() == 1)
                {
                    var single = group.Single();
                    Log(string.Format("{0}", single.BindingRedirect.NewVersion), true, ConsoleColor.Yellow);
                    cleaned.Add(single);

                    continue;
                }

                var highestVersion = group.OrderByDescending(x => x.BindingRedirect.NewVersion).First();

                Log(string.Format("{0}", highestVersion.BindingRedirect.NewVersion), true, ConsoleColor.Green);
                cleaned.Add(highestVersion);
            }

            redirects.DependentAssemblies = cleaned;
        }
Esempio n. 17
0
        private void RemoveBindingRedirects()
        {
            IEnumerable <AssemblyBinding> bindingRedirects = BindingRedirectResolver.GetBindingRedirects(AppDomain.CurrentDomain.BaseDirectory, AppDomain.CurrentDomain);
            string    configurationFilePath = Path.Combine(mProjectManager.Project.Root, mConfigurationFileName);
            XDocument document       = XDocument.Load(configurationFilePath);
            XElement  runtimeElement = document.Root.Element("runtime");
            IEnumerable <XElement> assemblyBindingElements = Enumerable.Empty <XElement>();

            if (runtimeElement != null)
            {
                assemblyBindingElements = runtimeElement.Elements(XName.Get("assemblyBinding", "urn:schemas-microsoft-com:asm.v1")).Elements(XName.Get("dependentAssembly", "urn:schemas-microsoft-com:asm.v1"));
            }
            IEnumerable <AssemblyBinding> configurationBindingRedirects = assemblyBindingElements.Select(x => AssemblyBinding.Parse(x));
            IEnumerable <AssemblyBinding> candidates = configurationBindingRedirects.Except(bindingRedirects);

            if (candidates.Any())
            {
                BindingRedirectManager bindingRedirectManager = new BindingRedirectManager(mProjectManager.Project, mConfigurationFileName);
                bindingRedirectManager.RemoveBindingRedirects(candidates);
            }
        }
Esempio n. 18
0
 private static void UpdateBindingRedirectElement(XElement element, AssemblyBinding bindingRedirect)
 {
     var bindingRedirectElement = element.Element(AssemblyBinding.GetQualifiedName("bindingRedirect"));
     // Since we've successfully parsed this node, it has to be valid and this child must exist.
     Debug.Assert(bindingRedirectElement != null);
     bindingRedirectElement.Attribute("oldVersion").SetValue(bindingRedirect.OldVersion);
     bindingRedirectElement.Attribute("newVersion").SetValue(bindingRedirect.NewVersion);
 }
Esempio n. 19
0
        private static IList <IPluginDescriptor> RegisterPlugins(IRegistry registry, IList <PluginData> topologicallySortedPlugins)
        {
            IPluginDescriptor[] pluginDescriptors = new IPluginDescriptor[topologicallySortedPlugins.Count];
            for (int i = 0; i < topologicallySortedPlugins.Count; i++)
            {
                Plugin        plugin        = topologicallySortedPlugins[i].Plugin;
                DirectoryInfo baseDirectory = topologicallySortedPlugins[i].BaseDirectory;

                try
                {
                    var pluginType = plugin.PluginType != null
                        ? new TypeName(plugin.PluginType)
                        : new TypeName(typeof(DefaultPlugin));

                    List <string> disabledReasons = new List <string>();

                    var pluginRegistration = new PluginRegistration(plugin.PluginId,
                                                                    pluginType, baseDirectory);
                    if (plugin.Parameters != null)
                    {
                        pluginRegistration.PluginProperties = plugin.Parameters.PropertySet;
                    }
                    if (plugin.Traits != null)
                    {
                        pluginRegistration.TraitsProperties = plugin.Traits.PropertySet;
                    }

                    pluginRegistration.ProbingPaths = plugin.ProbingPaths;
                    pluginRegistration.RecommendedInstallationPath = plugin.RecommendedInstallationPath;

                    if (plugin.EnableCondition != null)
                    {
                        pluginRegistration.EnableCondition = Condition.Parse(plugin.EnableCondition);
                    }

                    foreach (var file in plugin.Files)
                    {
                        pluginRegistration.FilePaths.Add(file.Path);
                    }

                    foreach (var dependency in plugin.Dependencies)
                    {
                        string pluginDependencyId = dependency.PluginId;

                        IPluginDescriptor pluginDependency = registry.Plugins[pluginDependencyId];
                        if (pluginDependency == null)
                        {
                            disabledReasons.Add(string.Format("Could not find plugin '{0}' upon which this plugin depends.", pluginDependencyId));
                        }
                        else
                        {
                            pluginRegistration.PluginDependencies.Add(pluginDependency);
                        }
                    }

                    foreach (var assembly in plugin.Assemblies)
                    {
                        Uri absoluteCodeBase;
                        if (assembly.CodeBase != null)
                        {
                            List <string> attemptedPaths    = new List <string>();
                            string        foundCodeBasePath = ProbeForCodeBase(baseDirectory, plugin.ProbingPaths, assembly.CodeBase, attemptedPaths);
                            if (foundCodeBasePath == null)
                            {
                                StringBuilder formattedPaths = new StringBuilder();
                                foreach (string path in attemptedPaths)
                                {
                                    if (formattedPaths.Length != 0)
                                    {
                                        formattedPaths.Append(", ");
                                    }
                                    formattedPaths.Append("'").Append(path).Append("'");
                                }

                                disabledReasons.Add(string.Format("Could not find assembly '{0}' after probing for its code base in {1}.",
                                                                  assembly.FullName, formattedPaths));
                                absoluteCodeBase = null;
                            }
                            else
                            {
                                absoluteCodeBase = new Uri(foundCodeBasePath);
                            }
                        }
                        else
                        {
#if STRICT_GAC_CHECKS
                            if (!IsAssemblyRegisteredInGAC(assembly.FullName))
                            {
                                disabledReasons.Add(
                                    string.Format("Could not find assembly '{0}' in the global assembly cache.",
                                                  assembly.FullName));
                            }
#endif

                            absoluteCodeBase = null;
                        }

                        var assemblyBinding = new AssemblyBinding(new AssemblyName(assembly.FullName))
                        {
                            CodeBase             = absoluteCodeBase,
                            QualifyPartialName   = assembly.QualifyPartialName,
                            ApplyPublisherPolicy = assembly.ApplyPublisherPolicy
                        };

                        foreach (BindingRedirect redirect in assembly.BindingRedirects)
                        {
                            assemblyBinding.AddBindingRedirect(new AssemblyBinding.BindingRedirect(redirect.OldVersion));
                        }

                        pluginRegistration.AssemblyBindings.Add(assemblyBinding);
                    }

                    IPluginDescriptor pluginDescriptor = registry.RegisterPlugin(pluginRegistration);
                    pluginDescriptors[i] = pluginDescriptor;

                    if (disabledReasons.Count != 0)
                    {
                        pluginDescriptor.Disable(disabledReasons[0]);
                    }
                }
                catch (Exception ex)
                {
                    throw new RuntimeException(string.Format("Could not register plugin '{0}'.",
                                                             plugin.PluginId), ex);
                }
            }
            return(pluginDescriptors);
        }
Esempio n. 20
0
        public void CodeBase_WhenCodeBaseIsNotAnAbsoluteUri_Throws()
        {
            var binding = new AssemblyBinding(new AssemblyName("Gallio"));

            Assert.Throws <ArgumentException>(() => binding.CodeBase = new Uri("bar/foo.dll", UriKind.Relative));
        }
Esempio n. 21
0
        private static XElement SerializeBinding(AssemblyBinding binding)
        {
            var xmlBindings =
                binding.DependentAssemblies.Select(
                                                   x =>
                                                       new XElement(
                                                       Ns + "dependentAssembly",
                                                       GetAssemblyIdentityXElement(x.AssemblyIdentity),
                                                       GetBindingRedirectXElement(x.BindingRedirect)));

            var xml = new XElement(Ns + "assemblyBinding", xmlBindings);

            return xml;
        }
Esempio n. 22
0
        public void AddBindingRedirect_WhenBindingRedirectIsNull_Throws()
        {
            var binding = new AssemblyBinding(new AssemblyName("Gallio"));

            Assert.Throws <ArgumentNullException>(() => binding.AddBindingRedirect(null));
        }
Esempio n. 23
0
 public void SetUp()
 {
     item = new AssemblyBinding();
 }