Hiding Incompatible Extensions in a Private Gallery - visual-studio

We have a private Extension Gallery within the company, that houses a variety of extensions (e.g. home-grown extensions, and those from VersionOne).
These extensions are just loaded into a directory on the server, which contains the atom.xml file for Visual Studio to read - this file is manipulated by hand whenever a new extension is uploaded.
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title type="text">Private Extension Gallery</title>
<id>uuid:874a62b3-c36c-4443-aeb9-498e4c6e589d;id=1</id>
<updated>2013-12-06T12:00:00Z</updated>
<!-- Version One TFS Policies -->
<entry>
<id>CC777458-29A8-4B89-B95A-416BE5F6198A</id>
<title type="text">VersionOne TFS Checkin Policy For 2012</title>
<summary type="text">TFS Checkin policy from VersionOne for Visual Studio 2012. Requires code commits to contain a VersionOne identifier</summary>
<published>2015-07-29T08:22:00Z</published>
<updated>2015-07-29T08:22:00Z</updated>
<author>
<name>VersionOne</name>
</author>
<category term="" />
<link rel="icon" href="Resources/VersionOne.ico" />
<content type="application/octet-stream" src="VersionOne.Integration.Tfs.Policy.VS2012.vsix" />
<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/developer/vsx-syndication-schema/2010">
<Id>CC777458-29A8-4B89-B95A-416BE5F6198A</Id>
<Version>1.2</Version>
</Vsix>
</entry>
<entry>
<id>9D7E0DF5-0A4D-4B43-9D73-4AD3F83260FA</id>
<title type="text">VersionOne TFS Checkin Policy For 2013</title>
<summary type="text">TFS Checkin policy from VersionOne for Visual Studio 2013. Requires code commits to contain a VersionOne identifier</summary>
<published>2015-07-29T08:22:00Z</published>
<updated>2015-07-29T08:22:00Z</updated>
<author>
<name>VersionOne</name>
</author>
<category term="" />
<link rel="icon" href="Resources/VersionOne.ico" />
<content type="application/octet-stream" src="VersionOne.Integration.Tfs.Policy.VS2013.vsix" />
<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/developer/vsx-syndication-schema/2010">
<Id>9D7E0DF5-0A4D-4B43-9D73-4AD3F83260FA</Id>
<Version>1.2</Version>
</Vsix>
</entry>
<entry>
<id>VersionOne.Integration.Tfs.Policy.Deployment.VS2015.50865266-cdad-4160-bb0b-b4090eaaf222</id>
<title type="text">VersionOne TFS Checkin Policy For 2015</title>
<summary type="text">TFS Checkin policy from VersionOne for Visual Studio 2015. Requires code commits to contain a VersionOne identifier</summary>
<published>2015-07-29T08:22:00Z</published>
<updated>2015-07-29T08:22:00Z</updated>
<author>
<name>VersionOne</name>
</author>
<category term="" />
<link rel="icon" href="Resources/VersionOne.ico" />
<content type="application/octet-stream" src="VersionOne.Integration.Tfs.Policy.VS2015.vsix" />
<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/developer/vsx-syndication-schema/2010">
<Id>VersionOne.Integration.Tfs.Policy.Deployment.VS2015.50865266-cdad-4160-bb0b-b4090eaaf222</Id>
<Version>1.2</Version>
</Vsix>
</entry>
<!-- END Version One TFS Policies -->
</feed>
The issue with this setup, is that when multiple versions of an extension exist (for different visual studio installations), you need to create multiple entries in the atom.xml to house these. When viewing this gallery in Visual Studio, these extensions appear in the list, even though they are not compatible with the VS version.
Is there any way to configure the atom.xml so that is will only serve up extensions that are compatible with the version of Visual Studio that you are viewing the gallery from?

I'm seeing the same thing for the private gallery at my company. Doing a little digging with .NET Reflector shows that extensions from the Visual Studio gallery are handled differently from Atom Feed extensions.
As far as I can tell, the extension VS compatibility information (version and SKU) within the .VSIX file isn't extracted until downloaded (you'll notice that if you try to install your VS2015 extension on VS2013 it will fail if the required versions are exclusive). I'm guessing the Visual Studio gallery extracts the compatibility information when you upload the extension, and this info is used to filter entries in the Extension Manager.
Long story short, extensions specified in the Atom Feed xml have no mechanism for providing VS compatibility info prior to download. I think this would require a change to the vsx-syndication-schema (http://schemas.microsoft.com/developer/vsx-syndication-schema/2010) and obviously a change to the Extension Manager code. I'm planning on entering this on microsoft.connect.com.

Related

Error Viewing Project Properties In .NET Core 2.0

Any time I view a project's properties, in Visual Studio, I get the following error:
An error occurred trying to load the page.
COM object that has been separated from its underlying RCW cannot be used.
This error message displays in project properties when I click on Application, Build, or Build Events. It is happening on .NET Core applications only, and even displays on a brand new project. I have a coworker that is having the exact same problem as well. It also seems to be happening on .NET Core 1.1 apps.
Project File:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Folder Include="wwwroot\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
</ItemGroup>
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
</ItemGroup>
</Project>
Running Visual Studio 2017 (Version 12.3.5) and Resharper 2017.2.1
Have both x86 and x64 runtime and SDK installed
It turns out this is happening because of a Veracode Visual Studio extension that I am using. If anyone else has this problem, I recommend disabling third party VS extensions, until you find one that might be causing it.
Somebody else reported this exact issue, using a different third party extension:

Basic Authentication on IIS Express

I've searched for a while now but I can't seem to find the answer. There are ways of disabling/enabling anonymous and windows authentication. Does anyone know how to enable basic authentication on IIS Express (8.0) in Visual Studio 2013?
Update ApplicationHost.config
In the the ApplicationHost.config file, find the following nodes and update the values:
<sectionGroup name="authentication"&gt
<basicAuthentication enabled="false" /> <!-- set to false -->
</sectionGroup&gt
<!-- ... -->
<authentication&gt
<section name="basicAuthentication" overrideModeDefault="Allow" /> <!-- set to allow -->
</authentication&gt
Locate ApplicationHost.config
VS 2015 and above (per Joost's answer):
sln_folder/.vs/applicationhost.config
VS 2013 and below:
%UserProfile%\Documents\IISExpress\config\applicationhost.config
As far as I know, there is no way to enable it for only one project.
An additional heads up, in Visual Studio 2015, the location of the applicationhost.config file that is actually being used is inside a folder called .vs inside your solution folder. The one in your user profile is not being used
Here are slightly more details than the previous answer had:
%USERPROFILE%\Documents\IISExpress\config\applicationhost.config:
<basicAuthentication enabled="true" />
In the same file: set
<anonymousAuthentication enabled="false" userName="" />
If you are not using domain test accounts, create a local user account with the password for the test login.

"Update Model" Wizard does not work with Npgsql and visual studio 2013 EntityFramework

Presently we use Visual Studio 2012, EF 5.0 and Npgsql 2.0.12.0.
I'd like to upgrade to Visual Studio 2013 and Npgsql 2.0.14.3 (I'm fine with EF 5.0 for now).
Presently we use the "Update Model" wizard which takes any changes in the schema and feeds them into the edmx file which is viewed in the VS designer. We do this by following the awkward procedure of using DDEX in Npgsql.Provider2 and starting the "experimental" Visual Studio instance.
But this no longer works in Visual Studio 2013 (after updating the generated registry entries). Also it does not work if I change he DbProvider to Npgsql 2.0.14.3 in machine.config.
It would be outstanding if someone could tell me if they got this to work and how.
As a temporary alternative, I'm considering updating the edmx file from the schema by using edmgen.exe. So far, I've been able to generate the .csdl, .ssdl and .mdl files, but I can't find a way to package all of them into a .edmx file. Has anyone tried this approach?
The EF Designer needs a DDEX provider to be able to work. Looks like originally the DDEX provider was only installed in your experimental version of VS2012. When you install VS2013 you don't have the registry keys for the DDEX provider and the EF Designer cannot work with your database.
Edmx is just gluing together csdl msl and ssdl. Assuming you are using v3 schemas (i.e. your csdl is in this namespace: xmlns="http://schemas.microsoft.com/ado/2009/11/edm") you can just paste the contents of the files in this template (I added comments which file should be pasted where):
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
<!-- EF Runtime content -->
<edmx:Runtime>
<!-- SSDL content -->
<edmx:StorageModels>
<!-- paste SSDL contents here -->
</edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
<!-- paste CSDL contents here -->
</edmx:ConceptualModels>
<!-- C-S mapping content -->
<edmx:Mappings>
<!-- paste MSL contents here -->
</edmx:Mappings>
</edmx:Runtime>
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<edmx:Designer xmlns="http://schemas.microsoft.com/ado/2009/11/edmx">
<edmx:Connection>
<DesignerInfoPropertySet>
<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly" />
</DesignerInfoPropertySet>
</edmx:Connection>
<edmx:Options>
<DesignerInfoPropertySet>
<DesignerProperty Name="ValidateOnBuild" Value="true" />
<DesignerProperty Name="EnablePluralization" Value="True" />
<DesignerProperty Name="CodeGenerationStrategy" Value="None" />
</DesignerInfoPropertySet>
</edmx:Options>
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
</edmx:Diagrams>
</edmx:Designer>
</edmx:Edmx>

WiX bootstrapper for .NET 4.5

I am new to WiX and have built a standalone installer. I would like to detect if the system has .NET 4.5 on it and prompt the user to install this. My development environment is Visual Studio 2010 using the WiX 3.7 toolset.
From some of the tutorials I have seen I should either use WiX 3.6 Burn or use the WiX bootstrapper project template in Visual Studio 2010.
For some reason, when I installed Wix 3.7 I don't have the bootstrapper template (I am not sure if I am missing an extension to download).
Is it better to use the bootstrapper template over Burn? What are the differences?
You need to create a new project named "Bootstrapper Project" (this template must be in your Visual Studio 2010 installation, related to the Windows Installer XML). Here are very good blog posts with manuals:
Introducing Managed Bootstrapper Applications by Heath Stewart
WiX Burn – tips/tricks by Neil Sleightholm
Wix burn, is Wix Bootstrapper. They are the same thing. Burn is simply the name given to the Wix Bootstrapper, but they do tend to switch around between calling it "wix burn" and "wix bootstrapper". But as I've said they are the same thing.
Here is my wix bootstrapper which checks for version of .net then downloads and installs it before installing my .msi You will need to add a reference to WixNetFxExtension.dll
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Bundle Name="MyProgramInstaller" Version="1.0.0.0" Manufacturer="myCompany" UpgradeCode="yourcodehere">
<!-- here's the license statement, would suggest you update this to something more useful. -->
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<!-- here's the .net download installer you can change this using the following chart -->
<!-- http://wixtoolset.org/documentation/manual/v3/customactions/wixnetfxextension.html -->
<PackageGroupRef Id="NetFx451Web"/>
<MsiPackage Id="myProgram" SourceFile="$(var.SolutionDir)SetupProject1/bin/Release/myProgramInstaller.msi"/>
</Chain>
</Bundle>
</Wix>

Unable to run Ajax Minifier as post-build in Visual Studio

I've set up my post build config as demonstrated at http://www.asp.net/ajaxlibrary/ajaxminquickstart.ashx
I'm getting the following error though:
The "JsSourceFiles" parameter is not supported by the "AjaxMin" task.
Verify the parameter exists on the task, and it is a settable public instance property.
My configuration settings......
<Import Project="$(MSBuildExtensionsPath)\Microsoft\MicrosoftAjax\ajaxmin.tasks" />
<Target Name="AfterBuild">
<ItemGroup>
<JS Include="**\*.js" Exclude="**\*.min.js" />
</ItemGroup>
<ItemGroup>
<CSS Include="**\*.css" Exclude="**\*.min.css" />
</ItemGroup>
<AjaxMin
JsSourceFiles="#(JS)" JsSourceExtensionPattern="\.js$" JsTargetExtension=".min.js"
CssSourceFiles="#(CSS)" CssSourceExtensionPattern="\.css$" CssTargetExtension=".min.css" />
</Target>
I had a look at the AjaxMinTask.dll with reflector and noted that the publicly exposed properties do not match the ones in my config. There is an array of ITaskItem called SourceFiles though so I edited my configuration to match.
<Import Project="$(MSBuildExtensionsPath)\Microsoft\MicrosoftAjax\ajaxmin.tasks" />
<Target Name="AfterBuild">
<ItemGroup>
<JS Include="**\*.js" Exclude="**\*.min.js" />
</ItemGroup>
<ItemGroup>
<CSS Include="**\*.css" Exclude="**\*.min.css" />
</ItemGroup>
<AjaxMin
SourceFiles="#(JS);#(CSS)" SourceExtensionPattern="\.js$;\.css$" TargetExtension=".min.js;.min.css"/>
</Target>
I now get the error:
The "SourceFiles" parameter is not supported by the "AjaxMin" task.
Verify the parameter exists on the task, and it is a settable public instance property.
I'm scratching my head now. Surely it should be easier than this?
I'm running Visual Studio 2010 Ultimate on a Windows 7 64 bit installation.
I wouldn't recommend minifying during AfterBuild. Many build systems make the assumption that the source code is readonly and/or unchanging when the build is being executed, and that would include the .min.js files.
Instead, you can hook into the "CopyWebApplication" target and Visual Studio 2010's website deployment engine (WPP / Web Publishing Pipeline) to accomplish the same thing without .min.js files at all.
Have a look at my response on this question:
Concatenate and minify JavaScript on the fly OR at build time - ASP.NET MVC
To answer your question directly however, the "SourceFiles" property no longer exists. Some older blog posts weren't updated and now have the old information. Try placing "Js" in front of the properties - ie/ JsSourceFiles="#(JS)".
Latest version - http://ajaxmin.codeplex.com/
Documentation - http://ajaxmin.codeplex.com/wikipage?title=AjaxMinTask

Resources