com.unity.ide.visualstudio@1.0.4

## [1.0.4] - 2019-04-12

- Fixing null reference issue for callbacks to AssetPostProcessor.
- Ensure Path.GetFullPath does not get an empty string.
This commit is contained in:
Unity Technologies
2019-04-12 00:00:00 +00:00
parent 3fc5e7ecb4
commit db5b2763de
4 changed files with 39 additions and 10 deletions

View File

@@ -1,5 +1,10 @@
# Code Editor Package for Visual Studio # Code Editor Package for Visual Studio
## [1.0.4] - 2019-04-12
- Fixing null reference issue for callbacks to AssetPostProcessor.
- Ensure Path.GetFullPath does not get an empty string.
## [1.0.3] - 2019-01-01 ## [1.0.3] - 2019-01-01
### This is the first release of *Unity Package visualstudio_editor*. ### This is the first release of *Unity Package visualstudio_editor*.

View File

@@ -225,6 +225,26 @@ namespace VisualStudioEditor
: ScriptingLanguage.None; : ScriptingLanguage.None;
} }
static List<Type> SafeGetTypes(System.Reflection.Assembly a)
{
var ret = new List<Type>();
try
{
ret = a.GetTypes().ToList();
}
catch (System.Reflection.ReflectionTypeLoadException rtl)
{
ret = rtl.Types.ToList();
}
catch (Exception)
{
return new List<Type>();
}
return ret.Where(r => r != null).ToList();
}
public void GenerateAndWriteSolutionAndProjects() public void GenerateAndWriteSolutionAndProjects()
{ {
// Only synchronize islands that have associated source files and ones that we actually want in the project. // Only synchronize islands that have associated source files and ones that we actually want in the project.
@@ -357,7 +377,7 @@ namespace VisualStudioEditor
static void OnGeneratedCSProjectFiles() static void OnGeneratedCSProjectFiles()
{ {
IEnumerable<Type> types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()) IEnumerable<Type> types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => SafeGetTypes(x))
.Where(x => typeof(AssetPostprocessor).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract); .Where(x => typeof(AssetPostprocessor).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract);
var args = new object[0]; var args = new object[0];
foreach (var type in types) foreach (var type in types)
@@ -373,7 +393,7 @@ namespace VisualStudioEditor
static bool OnPreGeneratingCSProjectFiles() static bool OnPreGeneratingCSProjectFiles()
{ {
IEnumerable<Type> types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()) IEnumerable<Type> types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => SafeGetTypes(x))
.Where(x => typeof(AssetPostprocessor).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract); .Where(x => typeof(AssetPostprocessor).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract);
bool result = false; bool result = false;
foreach (var type in types) foreach (var type in types)
@@ -395,7 +415,7 @@ namespace VisualStudioEditor
static string OnGeneratedCSProject(string path, string content) static string OnGeneratedCSProject(string path, string content)
{ {
IEnumerable<Type> types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()) IEnumerable<Type> types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => SafeGetTypes(x))
.Where(x => typeof(AssetPostprocessor).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract); .Where(x => typeof(AssetPostprocessor).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract);
foreach (var type in types) foreach (var type in types)
{ {
@@ -416,7 +436,7 @@ namespace VisualStudioEditor
static string OnGeneratedSlnSolution(string path, string content) static string OnGeneratedSlnSolution(string path, string content)
{ {
IEnumerable<Type> types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()) IEnumerable<Type> types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => SafeGetTypes(x))
.Where(x => typeof(AssetPostprocessor).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract); .Where(x => typeof(AssetPostprocessor).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract);
foreach (var type in types) foreach (var type in types)
{ {

View File

@@ -222,7 +222,7 @@ namespace VisualStudioEditor
} }
catch (Exception e) catch (Exception e)
{ {
UnityEngine.Debug.LogException(e); UnityEngine.Debug.LogError($"VS: {e.Message}");
} }
} }
@@ -370,7 +370,11 @@ namespace VisualStudioEditor
} }
UnityEditor.PackageManager.PackageInfo packageInfo = UnityEditor.PackageManager.PackageInfo.FindForAssetPath(comAssetPath); UnityEditor.PackageManager.PackageInfo packageInfo = UnityEditor.PackageManager.PackageInfo.FindForAssetPath(comAssetPath);
var progpath = packageInfo.resolvedPath + comAssetPath.Substring("Packages/com.unity.ide.visualstudio".Length); var progpath = packageInfo.resolvedPath + comAssetPath.Substring("Packages/com.unity.ide.visualstudio".Length);
var fileInfo = new FileInfo(path).FullName; string absolutePath = "";
if (!string.IsNullOrWhiteSpace(path))
{
absolutePath = Path.GetFullPath(path);
}
var solution = GetSolutionFile(path); var solution = GetSolutionFile(path);
if (solution == "") if (solution == "")
@@ -384,7 +388,7 @@ namespace VisualStudioEditor
StartInfo = new ProcessStartInfo StartInfo = new ProcessStartInfo
{ {
FileName = progpath, FileName = progpath,
Arguments = $"\"{CodeEditor.CurrentEditorInstallation}\" \"{fileInfo}\" {solution} {line}", Arguments = $"\"{CodeEditor.CurrentEditorInstallation}\" \"{absolutePath}\" {solution} {line}",
CreateNoWindow = true, CreateNoWindow = true,
UseShellExecute = false, UseShellExecute = false,
RedirectStandardOutput = true, RedirectStandardOutput = true,
@@ -409,7 +413,7 @@ namespace VisualStudioEditor
var errorOutput = process.StandardError.ReadToEnd(); var errorOutput = process.StandardError.ReadToEnd();
if (!string.IsNullOrEmpty(errorOutput)) if (!string.IsNullOrEmpty(errorOutput))
{ {
UnityEngine.Debug.Log("Error: \n" + errorOutput); Console.WriteLine("Error: \n" + errorOutput);
} }
process.WaitForExit(); process.WaitForExit();

View File

@@ -2,7 +2,7 @@
"name": "com.unity.ide.visualstudio", "name": "com.unity.ide.visualstudio",
"displayName": "Visual Studio Editor", "displayName": "Visual Studio Editor",
"description": "Code editor integration for supporting Visual Studio as code editor for unity. Adds support for generating csproj files for intellisense purposes, auto discovery of installations, etc.", "description": "Code editor integration for supporting Visual Studio as code editor for unity. Adds support for generating csproj files for intellisense purposes, auto discovery of installations, etc.",
"version": "1.0.3", "version": "1.0.4",
"unity": "2019.2", "unity": "2019.2",
"unityRelease": "0a7", "unityRelease": "0a7",
"dependencies": {}, "dependencies": {},
@@ -12,6 +12,6 @@
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git@github.cds.internal.unity3d.com:unity/com.unity.ide.visualstudio.git", "url": "git@github.cds.internal.unity3d.com:unity/com.unity.ide.visualstudio.git",
"revision": "073e1c76ae2fa95ff86200e26e9d59f2ebcd2527" "revision": "89fbb2a14dd60b56c2eb64eac1e574a40a105822"
} }
} }