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); }
// <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); }
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)); } }); }
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; }
// <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; }