views:

836

answers:

5

I'm getting used to using nant for build releases. But I have started to use asp.net MVC, and i choice make the setup for installation with a .vdproj .

But, when I call the:

< exec program="${dotnet.dir}/msbuild.exe" commandline='"./Wum.sln" /v:q /nologo /p:Configuration=Release' />

in nant, my result is:

[exec] D:\My Documents\Visual Studio 2008\Projects\Wum\Wum.sln : warning MS
B4078: The project file "Wum.Setup\Wum.Setup.vdproj" is not supported by MSBuild
and cannot be built.

Someone have some clue, or a solution? If I use the devenv, I'll have a problem?

Thanks in advance.

A: 

Which version of msbuild, 2 or 3.x?

david valentine
I'm using the .Net3.5.The version -> 3.5.3.
Luís Custódio
+1  A: 

MSBuild cannot build .vdproj projects. You should use Visual Studio (devenv.com) for this.

Sayed Ibrahim Hashimi
... or move from Visual Studio .NET Setup and Deployment Project to WiX which is going to be supported in VS 2010 anyway.
The Chairman
Yeah WiX is a much better option.
Sayed Ibrahim Hashimi
I'm using devenv now. The performance is the same?About WiX, You can suggest some good startup projects with this?Thanks
Luís Custódio
Take a look at http://wix.sourceforge.net/ for more info on WiX.
Sayed Ibrahim Hashimi
+1  A: 

FYI this is still not supported in .NET 4.0

Andrew Lewis
+1  A: 

Here is how I did this recently using devenv as msbuild will not do .vdproj files. This article really helped with updating the .vdproj file first: http://www.hanselman.com/blog/BuildingMSIFilesFromNAntAndUpdatingTheVDProjsVersionInformationAndOtherSinsOnTuesday.aspx

<target name="someTarget">
    <!-- full path to setup project and project file (MSI -> vdproj) -->
    <property name="DeploymentProjectPath" value="fullPath\proj.vdproj" />
    <!-- full path to source project and project file (EXE -> csproj) -->
    <property name="DependencyProject" value="fullPath\proj.csproj" />
    <script language="C#">
    <code>
      <![CDATA[
        public static void ScriptMain(Project project)
        {
            //Purpose of script: load the .vdproj file, replace ProductCode and PackageCode with new guids, and ProductVersion with 1.0.SnvRevisionNo., write over .vdproj file

            string setupFileName = project.Properties["DeploymentProjectPath"];
            string productVersion = string.Format("1.0.{0}", project.Properties["svn.revision"]);
            string setupFileContents;

            //read in the .vdproj file          
            using (StreamReader sr = new StreamReader(setupFileName))
            {
                setupFileContents = sr.ReadToEnd();
            }

            if (!string.IsNullOrEmpty(setupFileContents))
            {
                Regex expression2 = new Regex(@"(?:\""ProductCode\"" = \""8.){([\d\w-]+)}");
                Regex expression3 = new Regex(@"(?:\""PackageCode\"" = \""8.){([\d\w-]+)}");
                Regex expression4 = new Regex(@"(?:\""ProductVersion\"" = \""8.)(\d.\d.\d+)");
                setupFileContents = expression2.Replace(setupFileContents,"\"ProductCode\" = \"8:{" + Guid.NewGuid().ToString().ToUpper() + "}");
                setupFileContents = expression3.Replace(setupFileContents,"\"PackageCode\" = \"8:{" + Guid.NewGuid().ToString().ToUpper() + "}");
                setupFileContents = expression4.Replace(setupFileContents,"\"ProductVersion\" = \"8:" + productVersion);

                using (TextWriter tw = new StreamWriter(setupFileName, false))
                {
                    tw.WriteLine(setupFileContents);
                }
            }
        }
       ]]>
    </code>
    </script>

    <!-- must build the dependency first (code project), before building the MSI deployment project -->
    <exec program="Devenv.exe" commandline='"fullPath\solution.sln" /rebuild "Release" /project "${DependencyProject}" /out "fullPath\somelog.log"'/>
    <exec program="Devenv.exe" commandline='"fullPath\solution.sln" /rebuild "Release" /project "${DeploymentProjectPath}" /out "fullPath\somelog.log"'/>
</target>
CRice
+1  A: 

Just to expand on CRise's post - building a vdproj project using VS2010 devenv through command line doesn't work. Pre-2010 works fine I believe (see link text)

Siydub
Looks like there are some issues, I was using 2008. Microsoft have stated "The current estimate for the hotfix is mid August."
CRice