Невозможно опубликовать с помощью msbuild или aspnet_compiler с помощью cc.net - PullRequest
3 голосов
/ 20 мая 2009

Я пытаюсь автоматизировать публикацию проекта с множеством решений в cc.net. Я использую msbuild, который, в свою очередь, вызывает XML-файл aspnetcompiler. Проблема в том, что мой каталог содержит много решений, и когда я запускаю aspnetcompiler, он выдает мне следующую ошибку.

errorASPCONFIG: Ошибка использовать раздел, зарегистрированный как allowDefinition = 'MachineToApplication' за пределами уровня приложения. Эта ошибка может быть вызвана тем, что виртуальный каталог не настроен как приложение в IIS

Я испробовал все возможные решения, приведенные на многих форумах. Но я не совсем понимаю, как явно указать aspnet_compiler для выполнения определенного проекта из 20 проектов.

  I am using the ccnet build to call aspnet complier 
  <msbuild>
    <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
    <!--msbuild exe directory -->
    <workingDirectory>C:\cc\test\code\</workingDirectory>
    <!--your working directory -->
    <projectFile>C:\Program Files\CruiseControl.NET\server\AspNetCompilerConfiguration.xml</projectFile>
    <!--the configuration xml file which will hold  AspNetCompiler  lines-->
    <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
  </msbuild>

это мой файл AspNetCompilerConfiguration.xml

<Project
    xmlns = "http://schemas.microsoft.com/developer/msbuild/2003"
    name = "AspNetPreCompile"
    DefaultTargets = "PrecompileWeb">
    <Target Name = "PrecompileWeb">
            <AspNetCompiler
                    VirtualPath = "test" 
                    PhysicalPath = "C:\cc\test\code\"
                    TargetPath = "C:\cc\testitr\deploy\"
                    Force = "true"
                    Debug = "true"
                    Updateable = "true"/>
    </Target>
</Project> 

Теперь я хочу запустить C: \ cc \ test \ code \ Com.Project1.sln. но я не знаю, как сказать компилятор aspnet. Любая идея, как это сделать, а затем опубликовать это.

1 Ответ

0 голосов
/ 09 декабря 2009

Прежде всего: вы не можете публиковать веб-сайт по scirpt с помощью aspnet_compiler, но вы можете (Release-mode-) скомпилировать веб-сайт, что, как правило, одно и то же. Или вы можете использовать MsBuild, как я описал в этом посте.

Я рекомендую вам сгруппировать веб-сайты ASP.NET для файлов решений и создавать их. Тогда у вас будет меньше параметров и вы сможете протестировать сборку в Visual Studio.

Вот как вы можете использовать некоторые параметры в файле сборки cc.net для msbuild-scirpt:

  <msbuild>
    <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
    <!--msbuild exe directory -->
    <workingDirectory>C:\cc\test\code\</workingDirectory>
    <!--your working directory -->
    <projectFile>C:\Program Files\CruiseControl.NET\server\AspNetCompilerConfiguration.xml</projectFile>
    <!--the configuration xml file which will hold  AspNetCompiler  lines-->
    <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
    <!--Build arguments. You can have multiple projects or msbuild sections in cc.net.config-->
    <buildArgs>/p:Configuration=Debug;MyAttribute1=MyValue1;MyAttribute2=MyValue2;</buildArgs>
    <!--targets, if not default (here PrecompileWeb) -->
    <targets>Build;Analyze</targets>
  </msbuild>

Затем вы можете изменить свой AspNetCompilerConfiguration.xml (на мой взгляд, более подходящим именем будет что-то вроде MyWebSites.msbuild), чтобы принимать параметры:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" name = "AspNetPreCompile"    DefaultTargets = "PrecompileWeb">
  <!--Conditions are params from ccnet.config (or command line)-->
  <PropertyGroup Condition="'$(MyAttribute1)' == MyValue1" >
    <MySolution>c:\mything.sln</MySolution>
  </PropertyGroup>
  <PropertyGroup Condition="'$(MyAttribute1)' != MyValue1" >
    <MySolution>c:\some_other.sln</MySolution>
  </PropertyGroup>

  <!--This way you could import other msbuild-scirpts to manage separate files-->
  <!--<Import Project="Morexml.msbuild"/>-->

  <Target Name="Build">
    <Exec Command="echo hello world 1!"/>
    <MSBuild Projects="$(MySolution)" Targets="Rebuild" ContinueOnError="false" StopOnFirstFailure="false" />
  </Target>
  <Target Name="Analyze">
    <Exec Command="echo hello world 2!"/>
  </Target>
  <!--default, for example, here call some tasks -->
  <!--default is not used when targets are specified -->
  <Target Name="PrecompileWeb">
    <CallTarget Targets="Build" />
    <CallTarget Targets="Analyze" Condition="'$(MyAttribute2)' != 'MyValue2'" />
  </Target>
</Project>

.sln-файл решения можно настроить с помощью Visual Studio или Notepad. Однако на нем должны быть ваши сайты, примерно так:

Project("{ABCD1234-7377-472B-9ABA-BC803B73C123}") = "MyWebSite", "http://localhost/MyWebSite", "{12345678-5FD6-4177-B210-54045B098ABC}"
    ProjectSection(WebsiteProperties) = preProject
        Debug.AspNetCompiler.VirtualPath = "/MyWebSite"
        Debug.AspNetCompiler.PhysicalPath = "..\..\MyWebSite\"
        Debug.AspNetCompiler.TargetPath = "C:\MyPublishedWebsite\"
        Debug.AspNetCompiler.Updateable = "false"
        Debug.AspNetCompiler.ForceOverwrite = "true"
        ...

Там вы можете увидеть свойства. Там нет необходимости для IIS любой конфигурации. (Просто проверьте ваш выпущенный Web.Config (настройки выпуска / отладки и т. Д.) Или, возможно, используйте для этого какой-нибудь msbuild-Target.)

Надеюсь, это поможет!

...