user989988
user989988

Reputation: 3746

Check if a <PackageReference/> tag is added to .csproj file

I have a .csproj file as follows:

enter code here

If a <PackageReference/> tag is added to this csproj file, the build should fail. How do I do that? Is there any setting or a test I can add?

For example,

enter image description here

Upvotes: 0

Views: 227

Answers (2)

Adrian
Adrian

Reputation: 8597

On my phone at the moment, however you can do the following or rather follow this (unable to test for you):

In Pre-Build Events (Right click on your project, go to Properties) of the project, add the following command:

CD $(SolutionDir)
CALL CheckProj.ps1

Then on the root of your solution, create a bat file called "CheckProj.ps1"

The contents of your script should be along the lines of:

$xml = new-object System.Xml.XmlDocument;
$xml.LoadXml( (get-content 'MyProject.csproj') );
$node = $xml.SelectNodes('//Project/ItemGroup/PackageReference');
exit $node.Count;

Then on the rebuild of the project, if exit isn't equal to 0, it'll fail the build as 0 is expected to simulate success in a build event, anything higher will end up being marked as an error and should fail the whole build process.

Upvotes: 1

ScottishTapWater
ScottishTapWater

Reputation: 4846

I'm not entirely sure why you'd want to do this, but you could do this in a test fairly easily.

Using XUnit:

[Fact]
public void NoPackageReferences()
{
    string myCsproj = File.ReadAllText("path/to/my.csproj");
    Assert.DoesNotContain("PackageReference", myCsproj);
}

Now, if you wanted to be more thorough, you could parse the XML... But that's probably overkill for this.

Upvotes: 0

Related Questions