public void ResolveAssemblyPathInTargetFx_WhenDisposed_ReturnUnexpected()
        {
            var resolution = CreateInstance();

            resolution.Dispose();

            var resolvedPaths = new VsResolvedAssemblyPath[1];
            var result        = resolution.ResolveAssemblyPathInTargetFx(new[] { "System" }, 1, new VsResolvedAssemblyPath[1], out _);

            Assert.Equal(VSConstants.E_UNEXPECTED, result);
        }
        public void ResolveAssemblyPathInTargetFx_NameThatDoesNotMatch_SetsResolvedAssemblyPathsToZero(string input, string name, string version, string path)
        {
            var reference = Reference3Factory.CreateAssemblyReference(name, version, path);

            var resolution = CreateInstance(reference);

            var resolvedPaths = new VsResolvedAssemblyPath[1];
            var result        = resolution.ResolveAssemblyPathInTargetFx(new string[] { input }, 1, resolvedPaths, out uint resolvedAssemblyPaths);

            Assert.Equal(VSConstants.S_OK, result);
            Assert.Equal(0u, resolvedAssemblyPaths);
            Assert.Null(resolvedPaths[0].bstrOrigAssemblySpec);
            Assert.Null(resolvedPaths[0].bstrResolvedAssemblyPath);
        }
예제 #3
0
파일: EdmUtils.cs 프로젝트: phekmat/ef6
        // <summary>
        //     Return the EF Runtime assemblies path.
        // </summary>
        internal static string GetRuntimeAssemblyPath(Project project, IServiceProvider serviceProvider)
        {
            // Get Project Design Time Assembly Resolution.
            // Don't call GetVsHierarchy(project) because it causes dependencies with EDM Package service provider.
            var hierarchy = VSHelpers.GetVsHierarchy(project, serviceProvider);
            var dtar      = hierarchy as IVsDesignTimeAssemblyResolution;

            if (dtar != null)
            {
                // There is a bug where the first time you call ResolveAssemblyPathInTargetFx, resolvedAssemblyPathCount is 0.
                // So we are going to try 1 more time if the first call not successful.
                for (var i = 0; i < 2; i++)
                {
                    var  resolvedAssemblyPath = new VsResolvedAssemblyPath[1];
                    uint resolvedAssemblyPathCount;
                    if (dtar.ResolveAssemblyPathInTargetFx(
                            new string[1] {
                        "System.Data.Entity"
                    }, 1, resolvedAssemblyPath, out resolvedAssemblyPathCount) == VSConstants.S_OK)
                    {
                        if (resolvedAssemblyPathCount == 1)
                        {
                            return(Path.GetDirectoryName(resolvedAssemblyPath[0].bstrResolvedAssemblyPath));
                        }
                    }
                }
            }
            else
            {
                // Project Design Time Assembly Resolution is not found, try Global Design Time Assembly Resolution.
                var targetFrameworkMoniker = VsUtils.GetTargetFrameworkMonikerForProject(project, serviceProvider);
                var multiTargetingService  =
                    Services.ServiceProvider.GetService(typeof(SVsFrameworkMultiTargeting)) as IVsFrameworkMultiTargeting;

                string assemblyPath;
                if (multiTargetingService.ResolveAssemblyPath("System.Data.Entity", targetFrameworkMoniker, out assemblyPath)
                    == VSConstants.S_OK)
                {
                    return(Path.GetDirectoryName(assemblyPath));
                }
            }

            // if we could not resolve the assembly using global or project design time assembly resolution, return string empty.
            return(String.Empty);
        }
예제 #4
0
        public void TestDesignTimeAssemblyResolution()
        {
            UIThreadInvoker.Invoke((ThreadInvoker) delegate()
            {
                //Get the global service provider and the dte
                IServiceProvider sp = VsIdeTestHostContext.ServiceProvider;
                DTE dte             = (DTE)sp.GetService(typeof(DTE));

                string destination  = Path.Combine(TestContext.TestDir, TestContext.TestName);
                ProjectNode project = Utilities.CreateMyNestedProject(sp, dte, TestContext.TestName, destination, true);

                string[] assemblySpecs = new[] { "System", "System.Core" };
                VsResolvedAssemblyPath[] resolvedPaths = new VsResolvedAssemblyPath[assemblySpecs.Length];
                uint resolvedCount;
                project.GetProjectOptions();                 // force the initial build
                Marshal.ThrowExceptionForHR(project.ResolveAssemblyPathInTargetFx(assemblySpecs, (uint)assemblySpecs.Length, resolvedPaths, out resolvedCount));
                Assert.AreEqual(assemblySpecs.Length, (int)resolvedCount);
                for (int i = 0; i < resolvedCount; i++)
                {
                    Assert.IsTrue(resolvedPaths[i].bstrResolvedAssemblyPath.Contains(resolvedPaths[i].bstrOrigAssemblySpec));
                }
            });
        }
예제 #5
0
        public int ResolveAssemblyPathInTargetFx(string[] prgAssemblySpecs, uint cAssembliesToResolve, VsResolvedAssemblyPath[] prgResolvedAssemblyPaths, out uint pcResolvedAssemblyPaths)
        {
            if (prgAssemblySpecs == null || cAssembliesToResolve == 0 || prgResolvedAssemblyPaths == null)
            {
                throw new ArgumentException("One or more of the arguments are invalid.");
            }

            pcResolvedAssemblyPaths = 0;

            try
            {
                var results = designTimeAssemblyResolution.Resolve(prgAssemblySpecs.Take((int)cAssembliesToResolve));
                results.CopyTo(prgResolvedAssemblyPaths, 0);
                pcResolvedAssemblyPaths = (uint)results.Length;
            }
            catch (Exception ex)
            {
                return Marshal.GetHRForException(ex);
            }

            return VSConstants.S_OK;
        }
예제 #6
0
        // <summary>
        //     Return the EF Runtime assemblies path.
        // </summary>
        internal static string GetRuntimeAssemblyPath(Project project, IServiceProvider serviceProvider)
        {
            // Get Project Design Time Assembly Resolution.
            // Don't call GetVsHierarchy(project) because it causes dependencies with EDM Package service provider.
            var hierarchy = VSHelpers.GetVsHierarchy(project, serviceProvider);
            var dtar = hierarchy as IVsDesignTimeAssemblyResolution;

            if (dtar != null)
            {
                // There is a bug where the first time you call ResolveAssemblyPathInTargetFx, resolvedAssemblyPathCount is 0.
                // So we are going to try 1 more time if the first call not successful.
                for (var i = 0; i < 2; i++)
                {
                    var resolvedAssemblyPath = new VsResolvedAssemblyPath[1];
                    uint resolvedAssemblyPathCount;
                    if (dtar.ResolveAssemblyPathInTargetFx(
                        new string[1] { "System.Data.Entity" }, 1, resolvedAssemblyPath, out resolvedAssemblyPathCount) == VSConstants.S_OK)
                    {
                        if (resolvedAssemblyPathCount == 1)
                        {
                            return Path.GetDirectoryName(resolvedAssemblyPath[0].bstrResolvedAssemblyPath);
                        }
                    }
                }
            }
            else
            {
                // Project Design Time Assembly Resolution is not found, try Global Design Time Assembly Resolution.
                var targetFrameworkMoniker = VsUtils.GetTargetFrameworkMonikerForProject(project, serviceProvider);
                var multiTargetingService =
                    Services.ServiceProvider.GetService(typeof(SVsFrameworkMultiTargeting)) as IVsFrameworkMultiTargeting;

                string assemblyPath;
                if (multiTargetingService.ResolveAssemblyPath("System.Data.Entity", targetFrameworkMoniker, out assemblyPath)
                    == VSConstants.S_OK)
                {
                    return Path.GetDirectoryName(assemblyPath);
                }
            }

            // if we could not resolve the asembly using global or project design time assembly resolution, return string empty.
            return String.Empty;
        }
        public int ResolveAssemblyPathsInTargetFx(string pwszTargetFrameworkMoniker, Array prgAssemblySpecs, uint cAssembliesToResolve, VsResolvedAssemblyPath[] prgResolvedAssemblyPaths, out uint pcResolvedAssemblyPaths)
        {
            //var Assemblies = new List<string>(assemblySpecs.Length);

            pcResolvedAssemblyPaths = 0;

            return Microsoft.VisualStudio.VSConstants.S_OK;
        }