Skip to content

Commit 30f0c18

Browse files
author
nbasakuragi
committed
fixed a bug for vs2013 setup
1 parent fe1af31 commit 30f0c18

File tree

3 files changed

+70
-56
lines changed

3 files changed

+70
-56
lines changed

Src/LINQBridgeVs/LinqBridgeVsExtension/Configuration/PackageConfigurator.cs

+51-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
using System;
2+
using System.Collections;
23
using System.Diagnostics;
34
using System.IO;
5+
using System.Linq;
46
using System.Reflection;
57
using System.Text;
68
using System.Windows.Forms;
9+
using System.Xml;
10+
using System.Xml.Linq;
11+
using System.Xml.XPath;
712
using LINQBridgeVs.Logging;
813
using Microsoft.Win32;
914

@@ -13,7 +18,7 @@ internal static class PackageConfigurator
1318
{
1419
private static string _vsVersion;
1520
private static readonly string CurrentAssemblyVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion;
16-
private static readonly bool IsFramework45Installed = Directory.Exists(Locations.DotNet45FrameworkPath);
21+
public static readonly bool IsFramework45Installed = Directory.Exists(Locations.DotNet45FrameworkPath);
1722

1823
private static string LINQBridgeVsExtensionVersion
1924
{
@@ -191,7 +196,7 @@ private static void SetPermissions()
191196
if (Environment.Is64BitOperatingSystem)
192197
{
193198
var takeownProcessx64 = Process.Start("takeown",
194-
String.Format("/f {0}", Locations.MicrosoftCommonTarget64FileNamePath));
199+
String.Format("/f {0}", Locations.MicrosoftCommonTargetX64FileNamePath));
195200

196201
if (takeownProcessx64 != null) takeownProcessx64.WaitForExit();
197202
}
@@ -292,5 +297,49 @@ public static bool IsBridgeDisabled(string assemblyName)
292297
{
293298
return !IsBridgeEnabled(assemblyName);
294299
}
300+
301+
302+
public static void EnableLinqBridge(XDocument document, string location)
303+
{
304+
305+
var import = XName.Get("Import", "http://schemas.microsoft.com/developer/msbuild/2003");
306+
307+
if (document.Root == null || GetTargetImportNode(document) != null) return;
308+
309+
// ReSharper disable once AssignNullToNotNullAttribute
310+
var linqBridgeTarget = new XElement(import, new XAttribute("Project", Path.GetFileName(Resources.Targets)));
311+
312+
document.Root.Add(linqBridgeTarget);
313+
314+
document.Save(location);
315+
}
316+
317+
public static void DisableLinqBridge(XDocument document, string location)
318+
{
319+
var linqBridgeTargetImportNode = GetTargetImportNode(document);
320+
321+
if (linqBridgeTargetImportNode == null) return;
322+
323+
linqBridgeTargetImportNode.Remove();
324+
325+
document.Save(location);
326+
}
327+
328+
329+
private static XElement GetTargetImportNode(XDocument document)
330+
{
331+
var namespaceManager = new XmlNamespaceManager(new NameTable());
332+
namespaceManager.AddNamespace("aw", "http://schemas.microsoft.com/developer/msbuild/2003");
333+
334+
var importProjectNode =
335+
(IEnumerable)
336+
document.XPathEvaluate("/aw:Project/aw:Import[@Project='BridgeBuildTask.targets']",
337+
namespaceManager);
338+
339+
340+
var linqBridgeTargetImportNode = importProjectNode.Cast<XElement>().FirstOrDefault();
341+
342+
return linqBridgeTargetImportNode;
343+
}
295344
}
296345
}

Src/LINQBridgeVs/LinqBridgeVsExtension/LINQBridgePackage.cs

+17-52
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ public sealed class LINQBridgeVsPackage : Package
9191
private static readonly XDocument MicrosoftCommonTargetDocument
9292
= XDocument.Load(Locations.MicrosoftCommonTargetFileNamePath);
9393

94+
private static readonly XDocument MicrosoftCommonTargetX64Document
95+
= XDocument.Load(Locations.MicrosoftCommonTargetX64FileNamePath);
96+
97+
private static readonly XDocument MicrosoftCommonTarget45Document
98+
= XDocument.Load(Locations.MicrosoftCommonTarget45FileNamePath);
99+
94100
public DTE2 ApplicationObject
95101
{
96102
get
@@ -170,7 +176,11 @@ private void HandleVisualStudioShutDown()
170176
if (Process.GetProcessesByName(VisualStudioProcessName).Length > 1) return;
171177

172178
Log.Write("Disabling LINQBridgeVS. Only one VS instance opened");
173-
DisableLinqBridge();
179+
PackageConfigurator.DisableLinqBridge(MicrosoftCommonTargetDocument, Locations.MicrosoftCommonTargetFileNamePath);
180+
if (Environment.Is64BitOperatingSystem)
181+
PackageConfigurator.DisableLinqBridge(MicrosoftCommonTargetX64Document, Locations.MicrosoftCommonTargetX64FileNamePath);
182+
if (PackageConfigurator.IsFramework45Installed)
183+
PackageConfigurator.DisableLinqBridge(MicrosoftCommonTarget45Document, Locations.MicrosoftCommonTarget45FileNamePath);
174184

175185
PackageConfigurator.IsEnvironmentConfigured = false;
176186
}
@@ -191,7 +201,11 @@ private void OnStartupComplete()
191201
_dteEvents.OnStartupComplete -= OnStartupComplete;
192202
_dteEvents = null;
193203

194-
EnableLinqBridge();
204+
PackageConfigurator.EnableLinqBridge(MicrosoftCommonTargetDocument, Locations.MicrosoftCommonTargetFileNamePath);
205+
if (Environment.Is64BitOperatingSystem)
206+
PackageConfigurator.EnableLinqBridge(MicrosoftCommonTargetX64Document, Locations.MicrosoftCommonTargetX64FileNamePath);
207+
if (PackageConfigurator.IsFramework45Installed)
208+
PackageConfigurator.EnableLinqBridge(MicrosoftCommonTarget45Document, Locations.MicrosoftCommonTarget45FileNamePath);
195209

196210
Log.Write("OnStartupComplete End");
197211

@@ -202,58 +216,9 @@ private void OnStartupComplete()
202216
}
203217
}
204218

205-
private static void DisableLinqBridge()
206-
{
207-
var linqBridgeTargetImportNode = GetTargetImportNode();
208-
209-
if (linqBridgeTargetImportNode == null) return;
210-
211-
linqBridgeTargetImportNode.Remove();
212-
213-
MicrosoftCommonTargetDocument.Save(Locations.MicrosoftCommonTargetFileNamePath);
214-
215-
if (Environment.Is64BitOperatingSystem)
216-
MicrosoftCommonTargetDocument.Save(Locations.MicrosoftCommonTarget64FileNamePath);
217-
218-
219-
}
220-
221-
222-
private static void EnableLinqBridge()
223-
{
224-
225-
var import = XName.Get("Import", "http://schemas.microsoft.com/developer/msbuild/2003");
219+
226220

227-
if (MicrosoftCommonTargetDocument.Root == null || GetTargetImportNode() != null) return;
228221

229-
// ReSharper disable once AssignNullToNotNullAttribute
230-
var linqBridgeTarget = new XElement(import, new XAttribute("Project", Path.GetFileName(Resources.Targets)));
231-
232-
MicrosoftCommonTargetDocument.Root.Add(linqBridgeTarget);
233-
234-
235-
MicrosoftCommonTargetDocument.Save(Locations.MicrosoftCommonTargetFileNamePath);
236-
237-
if (Environment.Is64BitOperatingSystem)
238-
MicrosoftCommonTargetDocument.Save(Locations.MicrosoftCommonTarget64FileNamePath);
239-
}
240-
241-
242-
private static XElement GetTargetImportNode()
243-
{
244-
var namespaceManager = new XmlNamespaceManager(new NameTable());
245-
namespaceManager.AddNamespace("aw", "http://schemas.microsoft.com/developer/msbuild/2003");
246-
247-
var importProjectNode =
248-
(IEnumerable)
249-
MicrosoftCommonTargetDocument.XPathEvaluate("/aw:Project/aw:Import[@Project='BridgeBuildTask.targets']",
250-
namespaceManager);
251-
252-
253-
var linqBridgeTargetImportNode = importProjectNode.Cast<XElement>().FirstOrDefault();
254-
255-
return linqBridgeTargetImportNode;
256-
}
257222

258223

259224
#endregion

Src/LINQBridgeVs/LinqBridgeVsExtension/Locations.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ public static string InstallFolder
5555

5656
public static readonly string MicrosoftCommonTarget45FileNamePath = Path.Combine(DotNet45FrameworkPath, "Microsoft.Common.targets");
5757

58-
public static readonly string MicrosoftCommonTarget64FileNamePath = Path.Combine(DotNet40Framework64Path, "Microsoft.Common.targets");
58+
public static readonly string MicrosoftCommonTargetX64FileNamePath = Path.Combine(DotNet40Framework64Path, "Microsoft.Common.targets");
5959

6060
public static readonly string IcaclsArguments45 = String.Format("\"{0}\" /grant Everyone:F", DotNet45FrameworkPath);
6161

6262
public static readonly string IcaclsArgumentsCommonTarget = String.Format("{0} /grant Everyone:F", MicrosoftCommonTargetFileNamePath);
6363
public static readonly string IcaclsArguments45CommonTarget = String.Format("\"{0}\" /grant Everyone:F", MicrosoftCommonTarget45FileNamePath);
64-
public static readonly string IcaclsArgumentsX64CommonTarget = String.Format("{0} /grant Everyone:F", MicrosoftCommonTarget64FileNamePath);
64+
public static readonly string IcaclsArgumentsX64CommonTarget = String.Format("{0} /grant Everyone:F", MicrosoftCommonTargetX64FileNamePath);
6565
}
6666
}

0 commit comments

Comments
 (0)