Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Roslyn Analyzer #67

Open
rainersigwald opened this issue May 14, 2019 · 1 comment
Open

Roslyn Analyzer #67

rainersigwald opened this issue May 14, 2019 · 1 comment

Comments

@rainersigwald
Copy link
Member

There's a very common problem using Locator, which is that the natural code change to use it:

 void DoStuff()
 {
+    MSBuildLocator.RegisterDefaults();
     var project = new Microsoft.Build.Evaluation.Project(projectPath);

Doesn't work, because .NET loads all types referenced in a method before executing that method, so it tries to load MSBuild APIs before the Locator has made that possible.

#64 is one example of this but there have been a ton.

We can't fix this in the deployed code, because it won't have been loaded in time to do anything.

It might be possible, though, to create a Roslyn analyzer that ships as part of this package that checks to make sure there are no MSBuild APIs in a method that calls the locator. That would make things much easier for new users.

@cdmihai
Copy link
Contributor

cdmihai commented Feb 18, 2021

Why not do it in a static constructor from a type that does not reference any other type? Excluding the usual caveats with exceptions from type constructors.

class LoadMSBuild
{
   static LoadMSbuild(){ MSBuildLocator.RegisterDefaults(); }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants