Ho un errore di costruzione di un .vdproj su msbuild con Nant
Domanda
mi sto abituando ad usare Nant per i rilasci di compilazione. Ma ho iniziato ad usare asp.net MVC, e ho scelta fare il setup per l'installazione con un .vdproj.
Ma, quando chiamo il:
< exec program="${dotnet.dir}/msbuild.exe" commandline='"./Wum.sln" /v:q /nologo /p:Configuration=Release' />
in Nant, il mio risultato è il seguente:
[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.
Qualcuno ha qualche idea, o una soluzione?
Se uso il devenv, avrò un problema?
Soluzione
MSBuild non può costruire .vdproj progetti. Si consiglia di utilizzare Visual Studio (devenv.com) per questo.
Altri suggerimenti
Ecco come ho fatto di recente utilizzando devenv come msbuild non farà file .vdproj. Questo articolo ha veramente aiutato con l'aggiornamento del file .vdproj prima: 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>
FYI questo non è ancora supportato in .NET 4.0
Proprio per espandere il messaggio crise 's - la costruzione di un progetto di vdproj utilizzando devenv VS2010 attraverso la linea di comando non funziona. Pre-2010 funziona bene credo (vedi link testuale )