## 2018-10-18

### [Azure DevOps] Pending Changes gives "you are not authorized to access ..." error during Check-In

For some reason lately I have been periodically getting "... you are not authorized to access [filename.extension] ..." after clicking on the Check-In button in the "Pending Changes" section of the "Team Explorer" tab in Visual Studio.

I can't explain why this happens, but the workaround I've discovered is to click the "Refresh" button at the top of the dialog.  Once the refresh is complete, the check-in process seems to work fine.  I hope it works for you as well.

If you have run into the same and can explain why, please share in the comments.

Happy coding!

## The Problem

I like concise, so when I realized I could change the following:

 @Scripts.Render("~/bundles/bundle1") @Scripts.Render("~/bundles/bundle2") @Scripts.Render("~/bundles/bundle3") @Scripts.Render("~/bundles/bundle4") 

... to ...

 @Scripts.Render("~/bundles/bundle1", "~/bundles/bundle2", "~/bundles/bundle3", "~/bundles/bundle4") 

... naturally I got excited.  And it worked really well, that is, until I needed bundle3 to come before bundle1.

For a more realistic example, I have my own bundle that is dependent on KnockoutJS and requires Knockout to be loaded before my bundle is.  It would look like this:

 @Scripts.Render("~/bundles/something", "~/bundles/knockout", "~/bundles/adminView") 

I assumed that the bundles would be rendered in the same order I specified in that call, but it doesn't seem to play nice that way. My "~/bundles/adminView" was rendered before Knockout which broke my script.

To fix it, I removed my bundle from the rest of the list and moved it out into a separate Scripts.Render call. Now it looks like:

 @Scripts.Render("~/bundles/something", "~/bundles/knockout") @Scripts.Render("~/bundles/adminView") 

Doing this forced my "adminView" bundle to be rendered after the other two because it was a separate call.

## Moral of the Story

You can only "bundle" multiple bundle paths in one Scripts.Render call when none of them depend on each other, because you can't count on what order they will be rendered in. I don't know how Microsoft decides the order to render them in, but it's not necessarily the order you provide.

If order matters, use separate calls and order them the way you need to.

## 2018-06-13

### NUnit 3.x: Asserting Equal Decimal Values with a Precision Threshold

With the newer style of doing assertions in NUnit 3.x, I was trying to figure out how to assert a decimal whose value was 1 digit precision on the right-side of the decimal, but only allowing a variance of 0.0001.

I believe this is the best practice, but will be happy to be corrected if someone knows a better way.

 Assert.That(actualObject.SomeDecimalValue, Is.EqualTo(42.6m).Within(0.0001m)); 

## 2015-08-21

### [SOLVED] Visual Studio "Attach to Process": Available Processes list appears empty

• Open the "Attach to Process" dialog (For VS2012: Alt-D | P)
• Find msvsmon.exe, highlight it, then click End Process button
• Go back to "Attach to Process" and click "Refresh" button

### The Story Behind the Answer:

I don't know if this will apply to more than Visual Studio 2012, but if it does, fantastic; please let us know in the comments.

A few days ago, my Visual Studio 2012 went wonky and decided to not show me the Available Processes in the "Attach to Process" dialog in most cases.

Here is what it should look like:

Here is what it looks like when the problem occurs.  Notice how, if I hover inside it, it will show me the tooltip for the process I'm currently over.  This suggests the list is actually populated, and double-clicking on that spot will actually make the debugger try to attach to it.  The information is there; the questions are, "Is it white font on white background?" or "Is there some other kind of painting/rendering issue with the dialog box?"

Looking around the internet, I could not seem to find the right phrase to search to find help with this issue; until I finally stumbled upon this StackOverflow question that was as close as I could get.  One answer suggested renaming MSVSMON.EXE in the x64 folder and copying the x86 version to it.

Not feeling comfortable with that, I decided to experiment with a similar concept.  I opened Task Manager and saw that msvsmon.exe was a running process.

I executed an "End Task" on the process, and was met with this error:
Going back to my already open "Attach to Process" dialog, I clicked "Refresh" and BAM! ... there appeared the visible list.

I have done this several times, each time resulting in success.  I hope it works for you!

## 2015-07-03

### Data Dynamics Reports - Enabling sorting on column headers causes abnormal height growth when CanGrow is True

I ran into a weird one today when working with a Data Dynamics Report (DDR) that needed sorting enabled on the column headers of a table.  Each of the TextBox controls in the column header cells were set to CanGrow=True, which was good to make sure each could fit their content.  Width was forced, so the only way for it to grow was in height.  It worked great until I enabled sorting.

Each column cell required sorting, so I added the SortExpression to each accordingly.  The instant I brought up the report in the WebReportViewer, it looked like the heights of the header cells were twice as tall as needed to fill the largest content of any of the given cells.

I then reverted my changes and the height went back to normal, making the height of the table row equal to the cell with the most content in it.  I deduced that DDR was computing height based on the extra sorting control being added to each cell, but somehow was calculating too much.  As I changed strings, the height would grow relative to the amount of content in the cell... so if the string was longer, the cell would grow all the more tall; looking double what the content in the cell was taking in height.

As I was about to give up and disable sorting on the report because the headers were taking up 1/3 of the page, I decided to try an experiment.

I turned CanGrow=False on every one of the column headers' TextBox controls (leaving the sorting enabled.)  The height went down to minimal, where only one line of text would show, and the rest was hidden because the row wasn't tall enough.  Great.  I have a baseline now!

The next step was to try changing CanGrow=True only on the cell I knew would have the most content in it.
Win!

So if you run into a similar issue, try the following:

• Change CanGrow=False on all TextBox controls in your column headers, except the cell you know will have the largest content.

## 2014-07-25

### [SOLVED] GrapeCity/ComponentOne ActiveReports 8 - Excel Export using WebViewer is broken

The ActiveReports engine is a great engine for rendering reports for an application.  Sometimes, though, errors will occur that have multiple reasons for why they show up; some known, others not.

It's very hard to troubleshoot those or to find solutions for them, even if you have incredible internet search skills.  That said, this solution may not work for you, but hopefully will give you a quick test to see if you can move on to another suggestion.

I was puzzled while trying to solve a problem we had in our web application where exporting via ActiveReports 8 WebViewer to PDF or DOC worked fine, but XLS for some reason returned a 404 error.

The problem turned out to be with mine that we missed laying down a DLL required by the Excel exporter (GrapeCity.ActiveReports.Export.Excel.v8.dll) called DocumentFormat.OpenXml.dll, which didn't seem to be referenced by the other Export DLLs.

As soon as I put this in place, it started working again.

This file could be easily missed as it is not named like the other export related DLLs:
GrapeCity.ActiveReports.Export.*.v8.dll

Make sure to include that and you'll have one less reason to see a 404 error when you try exporting to Excel from ActiveReports!

On a side note, the following are all of the referenced DLLs (Microsoft DLLs excluded) for GrapeCity.ActiveReports.Export.Excel.dll in case you need to check for others also missing:
• DocumentFormat.OpenXml.dll
• GrapeCity.ActiveReports.Diagnostics.v8.dll
• GrapeCity.ActiveReports.Document.v8.dll
• GrapeCity.ActiveReports.Export.Rdf.v8.dll
• GrapeCity.ActiveReports.Extensibility.v8.dll
• GrapeCity.ActiveReports.v8.dll
Best of luck!

## 2013-08-28

### MSBuild - Copy Task using Items with Includes and Excludes

I struggled for a couple of hours on this one... until finally finding this useful answer from stackoverflow.com! My scenario was needing to copy some files in a pre-build step in a Visual Studio C# project. For every file I needed to copy, there was a counterpart for each of our supported languages. The naming convention for the files was like this:

MyFile.properties
MyFile_de_DE.properties
MyFile_fr_FR.properties

etc.

Here is what my csproj looked like:
<PropertyGroup>
<ReportingEnglishLocFolder>$(SolutionDir)..\path\to\destination\</ReportingEnglishLocFolder> </PropertyGroup> <ItemGroup> <EnglishLocPropertiesFiles Include="$(ReportingBaseFolder)master\*.properties"
Exclude="*_de_DE.properties"/>
</ItemGroup>
<Copy
SourceFiles="@(EnglishLocPropertiesFiles)"
DestinationFolder="$(ReportingEnglishLocFolder)" />  After attempting multiple combinations of wildcard patterns and having no success, I changed the search phrases I used to search the internet and found the stackoverflow thread. The most important part from the thread, and the most important thing to remember about using Include and Exclude is: If you use an absolute path for Include, you must use an absolute path for Exclude. If you use a relative path for Include, you must use a relative path for both. So I changed to this and it worked like a champ! <ItemGroup> <EnglishLocPropertiesFiles Include="$(ReportingBaseFolder)master\*.properties"
Exclude="$(ReportingBaseFolder)master\*_de_DE.properties"/> </ItemGroup>  So remember, whichever type of path you use for Include, you need to do the same for Exclude. ## 2013-08-09 ### Silverlight: ObservableCollection.CollectionChanged Event The ObservableCollection<T>.CollectionChanged event will only fire if the collection itself changes (items are added, removed or rearranged/moved.), NOT if an item in the collection changes (meaning one of the item's in the collection has one or more properties modified.) It's now around 2:30am, and I've been going the rounds for a couple of hours with a Silverlight project at work; fighting a seemingly simple change that ended up not being so simple because of a major misunderstanding of the CollectionChanged event on the ObservableCollection<T>. My ObservableCollection<T>.CollectionChanged event was not firing like I thought it should. I imagine this will be a common mistake for others, and I'm sure I myself am doomed to repeat it again in the future; so I'm documenting it for a quick reminder later. My thought process was this... "I need to watch my ObservableCollection for one of its items to be changed. Once the item is changed, I need to flip a boolean flag which happens to be bound to a command which will disable a button after the change has been made." Simple, right? I should just be able to handle the ObservableCollection<T>.CollectionChanged event, because if one of those items in the collection gets changed, that counts... Or not. See, the misconception is, the collection itself hasn't changed. It has the exact same items it had before, it's just that the item within the collection changed. So there are two things that can happen to your collection: • The collection itself is modified (Items are added, removed or moved.) • An item in the collection is modified (its individual properties are changed.) Let me illustrate: For this example we will have a class called VideoGame to keep track of titles and costs. public class VideoGame : INotifyPropertyChanged { private string _title; public string Title { get { return _title; } set { _title = value; RaisePropertyChanged("Title"); } } private decimal _cost; public decimal Cost { get { return _cost; } set { _cost = value; RaisePropertyChanged("Cost"); } } public event PropertyChangedEventHandler PropertyChanged; public void RaisePropertyChanged(string propertyName) { if(PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }  And now some code to use it... ObservableCollection<VideoGame> videoGames = new ObservableCollection<VideoGame> { new VideoGame{ Title = "TrackMania 2: Stadium", Cost = 9.99M }, new VideoGame{ Title = "TrackMania 2: Canyon", Cost = 19.99M }, new VideoGame{ Title = "TrackMania 2: Valley", Cost = 19.99M }, }; videoGames.CollectionChanged += (sender, eventArgs) => { Debug.WriteLine("--- The collection changed"); }; Debug.WriteLine("Changing the cost of one of the video games in the collection..."); // The CollectionChanged event will not fire because it was just one of the collection's items that changed... // not the collection itself. videoGames[0].Cost = 7.99M; // the game went on sale. Debug.WriteLine("Adding a video game to the collection..."); // The CollectionChanged event WILL fire because the collection of items changed. videoGames.Add(new VideoGame{ Title ="ShootMania: Storm", Cost = 19.99M });  And the output... Changing the cost of one of the video games in the collection... Adding a video game to the collection... --- The collection changed When it dawned on me, at first I was frustrated; but then clarity set in. It makes sense to me that we only want the CollectionChanged event to fire when the collection itself is modified, not its individual parts. With it, the NotifyCollectionChangedEventArgs that are passed with the event give us a lot of good information about what happened with the change. • Action - Tells which action effected the change in the collection (Add, Remove, Replace, Reset) • NewItems - The items affected by the action • OldItems - The items removed or replaced in the collection • NewStartingIndex - Tells the index where the change occurred. • OldStartingIndex - Tells where a Replace or Remove action took place. While all this is cool, what do I need to have happen so I can track when an item in the collection is changed? I need to make sure I handle PropertyChanged on the individual items of the collection. Make note, this can be tricky because I still need to watch for the Collection to change so I can subscribe to any new items' PropertyChanged events as they are added to the collection, and clean up after myself when the items leave the collection. I'll let you decide how you're going to approach that; it's a discussion for another day. But I want to drive home the concept that the CollectionChanged event is just that... when the collection itself changes, not its individual items. Know that, and you'll save yourself a lot of time. ## 2013-04-02 ### [SOLVED] "Attaching the Script debugger to process iexplore.exe failed" message after upgrading to Internet Explorer 10 HUGE thanks going out to Dmitri Leonov - MSFT in a stackoverflow article about the same message. After updating to Internet Explorer 10, I started receiving the error when debugging with Visual Studio 2010: "Attaching the Script debugger to process [####] iexplore.exe failed. Another debugger may already be attached to the process." The fix: • Close all instances of Internet Explorer. (I will add you can leave Visual Studio open) • Run a command prompt as Administrator and paste this little gem into the command line: It worked like a champ for me (and apparently others from comments on the stackoverflow post.) Good riddance to an annoying message! Happy coding. ## 2013-01-08 ### JavaScript String.Replace: Replacement Pattern for Full Match Reminder This is my quick reminder to self to use$&
$0 in JavaScript for Regular Expression replacement patterns when wishing to use the entire matched text. Some browsers allow$0, but $& is officially documented (table 22, page 147) and supposed to work in all of them. Example: document.write("Hello World".replace(/^Hello/, "$& to the whole");