2

I am writing a short batch file to prepare a control library DLL with Examples project for deployment via sip file and have the following question.

Given a csproj file at known location and a DLL at known location, is it possible to programmatically update the csproj from the batch file (via third party command line exe, or other scripting) to add the new DLL?

My folder structure is

/Build 
   /SDK
      /WPF
          /4.0 : ControlLibrary.dll sits here
   /Examples
      /WPF
          /4.0 : Examples.csproj sits here

Assuming the batch file is at the /Build level, is there any way to modify Examples.csproj to reference ControlLibrary.dll ?

Just to clarify, the reason why I have the structure like this is I wish to deploy an examples csproj to ship with my control library. Examples.csproj should reference the obfuscated control library under SDK/. Examples.csproj also exists on dev trunk (where it has been copied from) and in the development solution it references output of ControlLibrary.csproj on non obfuscated form.

Essentially what im creating here is a folder structure to zip up and ship the ControlLibrary plus examples, hence, the need to update the reference.

Update - Solved using Powershell

Please see this related question and answer on adding and removing references using Powershell

Community
  • 1
  • 1
Dr. Andrew Burnett-Thompson
  • 20,980
  • 8
  • 88
  • 178

2 Answers2

3

csproj files are XML files - you can easily write a command line application to manipulate these files (adding, removing nodes etc).

You can call such a command line application from your batch file.

You can find the schema for this file at:

%windir%\Microsoft.NET\Framework\[framework version]\Microsoft.Build.xsd

As described in this SO answer.

Community
  • 1
  • 1
Oded
  • 489,969
  • 99
  • 883
  • 1,009
2

I don't understand why you would need to modify the csproj file in your case. Just make sure the library reference in the csproj file is relative, i.e. ..\..\..\SDK\WPF\4.0\ControlLibrary.dll and it will keep working fine even if you move the complete folder hierarchy to a new location.

If you're trying to simplify adding the library to new projects though, take a look at NuGet. It's the best way for distributing and deploying libraries.

Damir Arh
  • 17,637
  • 2
  • 45
  • 83
  • thanks for your answer Damir. Its not possible to use a relative reference in this case. I've updated the Q to clarify the requirement – Dr. Andrew Burnett-Thompson Jan 21 '12 at 20:06
  • Nuget looks interesting. Do you know if this can be used for commercial dlls too? This one will have a tined trial + developer license key to unlock when purchased. If license keys were distributed via a separate site could locked all be distributed via nuget? – Dr. Andrew Burnett-Thompson Jan 21 '12 at 20:56
  • @Dr.AndrewBurnett-Thompson I'm not sure about the NuGet Online Gallery terms and conditions for publishing packages but I suppose it is allowed. There are at least a couple of commercial libraries published already: RavenDB, JustMock and Kendo UI among them. – Damir Arh Jan 22 '12 at 04:51