Exemplo n.º 1
0
 public void Init()
 {
     Isolate.WhenCalled(() => FS.FileSystem).WillReturn(new MockFileSystem());
     Isolate.WhenCalled(() => CommonRegistryConfigurations.IsSolutionEnabled("", "")).WillReturn(true);
     Isolate.WhenCalled(() => CommonRegistryConfigurations.IsErrorTrackingEnabled("")).WillReturn(false);
     Isolate.WhenCalled(() => CommonRegistryConfigurations.IsLoggingEnabled("")).WillReturn(false);
 }
        public void Init()
        {
            Isolate.WhenCalled(() => FS.FileSystem).WillReturn(MockFileSystem);

            Isolate.WhenCalled(() => CommonRegistryConfigurations.Map3RdPartyAssembly("", "")).WillReturn(false);
            Isolate.WhenCalled(() => CommonRegistryConfigurations.IsErrorTrackingEnabled("")).WillReturn(false);
            Isolate.WhenCalled(() => CommonRegistryConfigurations.IsLoggingEnabled("")).WillReturn(false);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="VisualizerAttributeInjector"/> class.
        /// </summary>
        /// <param name="targetVisualizerAssemblyPath">The assembly debugger visualizer location.</param>
        /// <param name="targetVsVersion">The targeted Visual Studio version</param>
        /// <exception cref="System.IO.FileNotFoundException"></exception>
        public VisualizerAttributeInjector(string targetVisualizerAssemblyPath, string targetVsVersion)
        {
            if (!FS.FileSystem.File.Exists(targetVisualizerAssemblyPath))
            {
                throw new FileNotFoundException(
                          $"Assembly doesn't exist at location {targetVisualizerAssemblyPath}");
            }


            //usually vsVersion has this format 15.0 so I'm only interested in the first part
            string versionNumber = targetVsVersion.Split('.').FirstOrDefault();

            int.TryParse(versionNumber, out int vsVersion);

            if (vsVersion == 0)
            {
                throw new ArgumentException($"Visual Studio version is incorrect {_targetVsVersion}");
            }

            _targetVsVersion = vsVersion;

            //create pdb info if logging or error tracking is enabled
            bool createPdbInfo = CommonRegistryConfigurations.IsLoggingEnabled(targetVsVersion);

            createPdbInfo |= CommonRegistryConfigurations.IsErrorTrackingEnabled(targetVsVersion);

            _writerParameters = new WriterParameters
            {
                WriteSymbols         = createPdbInfo,
                SymbolWriterProvider = createPdbInfo ? new PdbWriterProvider() : null
            };

            ReaderParameters readerParameters = new ReaderParameters
            {
                AssemblyResolver             = GetAssemblyResolver(targetVisualizerAssemblyPath),
                ReadingMode                  = ReadingMode.Immediate,
                SymbolReaderProvider         = createPdbInfo ? new PdbReaderProvider() : null,
                InMemory                     = true,
                ReadSymbols                  = createPdbInfo,
                ThrowIfSymbolsAreNotMatching = false,
            };

            //using a stream is better for testing
            _assemblyStream = FS.FileSystem.File.OpenRead(targetVisualizerAssemblyPath);

            _debuggerVisualizerAssembly = AssemblyDefinition.ReadAssembly(_assemblyStream, readerParameters);

            InitializeDebuggerAssembly();
            RemapAssembly();
        }
Exemplo n.º 4
0
        public void Capture(Exception exception, ErrorLevel errorLevel = ErrorLevel.Error, string message = "")
        {
            if (!CommonRegistryConfigurations.IsErrorTrackingEnabled(VisualStudioVersion))
            {
                return;
            }

            var sentryEvent = new SentryEvent(exception)
            {
                Message = message,
                Level   = errorLevel
            };

            sentryEvent.Tags.Add("Visual Studio Version", VisualStudioVersion);

            _ravenClient.Capture(sentryEvent);
        }
        public void Init()
        {
            Isolate.WhenCalled(() => FS.FileSystem).WillReturn(MockFileSystem);

            object[] args =
            {
                AssemblyToInjectLocation, FileMode.Open, FileAccess.ReadWrite,
                FileShare.Read
            };
            Stream access = FS.FileSystem.File.Open(AssemblyToInjectLocation, FileMode.Open, FileAccess.Read,
                                                    FileShare.ReadWrite);

            Isolate.NonPublic.WhenCalled(typeof(ModuleDefinition), "GetFileStream")
            .WithExactArguments(args)
            .WillReturn(access);

            Isolate.WhenCalled(() => CommonRegistryConfigurations.Map3RdPartyAssembly("", "")).WillReturn(false);
            Isolate.WhenCalled(() => CommonRegistryConfigurations.IsErrorTrackingEnabled("")).WillReturn(false);
            Isolate.WhenCalled(() => CommonRegistryConfigurations.IsLoggingEnabled("")).WillReturn(false);
        }
Exemplo n.º 6
0
        public static void Capture(this Exception exception, string vsVersion, ErrorLevel errorLevel = ErrorLevel.Error, string message = "")
        {
            if (string.IsNullOrEmpty(vsVersion))
            {
                return;
            }

            if (!CommonRegistryConfigurations.IsErrorTrackingEnabled(vsVersion))
            {
                return;
            }

            Func <Requester, Requester> removeUserId = new Func <Requester, Requester>(request =>
            {
                //GDPR compliant, no personal data sent: no server name, no username stored, no ip address
                request.Packet.ServerName           = LinqBridgeVs;
                request.Packet.Contexts.Device.Name = LinqBridgeVs;
                request.Packet.User.Username        = CommonRegistryConfigurations.GetUniqueGuid(vsVersion);
                request.Packet.Release        = Assembly.GetExecutingAssembly().VersionNumber();
                request.Packet.User.IpAddress = "0.0.0.0";
                return(request);
            });

            SentryEvent sentryEvent = new SentryEvent(exception)
            {
                Message = message,
                Level   = errorLevel
            };

            sentryEvent.Tags.Add("Visual Studio Version", vsVersion);

            RavenClient ravenClient = new RavenClient(RavenClientId)
            {
                BeforeSend     = removeUserId,
                ErrorOnCapture = OnSendError,
                Timeout        = TimeSpan.FromMilliseconds(Timeout) //should fail early if it can't send a message
            };

            ravenClient.Capture(sentryEvent);
        }