MSBuild复制任务找不到定义的属性的值 [英] MSBuild copy task does not find value of property defined

查看:97
本文介绍了MSBuild复制任务找不到定义的属性的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我遇到的问题是我的目标"CopyBuildFiles"无法复制,因为我认为它无法找到生成文件夹.构建文件夹在属性$(BuildFolder)中定义,该文件夹名称是基于date.time创建的,并且是在"CopyBuildFiles"之前运行的先前目标之一中创建的.
如果我对@(SrcFiles)的路径进行硬编码,而不是从$(BuildFolder)派生,则可以使用.
有什么想法,这里发生了什么,如何解决?
非常感谢.

 <?  xml    版本  ="    编码  ="  utf-8" > 
<  项目    ="   http://schemas.microsoft.com/developer/msbuild/2003" <  属性组 > 
        <  年份 >  $([ System.DateTime] :: Now.ToString("yy"))<  /year  > 
        <   >  $([ System.DateTime] :: Now.ToString("MM"))<  /month  > 
        <   >  $([ System.DateTime] :: Now.ToString("dd"))<  /day  > 
        <  时间 >  $([ System.DateTime] :: Now.ToString("HHmm"))<  /time  > 
        <   AssemblyFileVersionAttribute  >  [$( year).$(month).$(day).$(time))] <  /AssemblyFileVersionAttribute  > 
        <   BuildFolder  >  c:\ website.builds \ $(AssemblyFileVersionAttribute)\ <  /BuildFolder  > 
        <   IISFolder  >  c:\ website.publish \ <  /IISFolder  > 
        <   LogDirectory  >  C:\ website.builds.logs <  /LogDirectory  > 
        <   LogFile  >  C:\ website.builds.logs \ Buildlog _ $(AssemblyFileVersionAttribute).txt <  /LogFile  <  /PropertyGroup  > 
    
   
    <  目标    ="   PreBuild" <   MakeDir     ="   $(LogDirectory)" / <   RemoveDir     ="   $(IISFolder)" <  > 
        <   MakeDir     ="   $(BuildFolder)" / <   MakeDir     ="   $(IISFolder)" / <  /Target  > 
    <  目标    ="  编译" <   MSBuild     ="   $(MSBuildStartupDirectory)\ websitev2.sln"     属性   OutDir = $(BuildFolder)\" / <  /Target  > 
    <   ItemGroup  > 
        <   SrcFiles     ="   $(BuildFolder)_PublishedWebsites \ ** \ *.*" / > 
    <  /ItemGroup  > 
    <  目标    ="   CopyBuildFiles" 
                             输入  ="  
 
                         输出  =
          "  <  复制    ="   @(SrcFiles)" 
                             目标文件  ="  
                     > 
    <  /Target  > 
    
    <  目标    ="   Deploy" <   CallTarget     ="   PreBuild" / <   CallTarget     ="  编译" / <   CallTarget     ="   CopyBuildFiles" / <  /Target  > 
   
<  /Project  >  

解决方案

(BuildFolder),此文件夹名称是基于date.time创建的,并且是在"CopyBuildFiles"之前运行的先前目标之一中创建的.
如果我对@(SrcFiles)的路径进行硬编码,而不是从


(BuildFolder)派生,则可以使用.
有什么想法,这里发生了什么,如何解决?
非常感谢.

 <?  xml    版本  ="    编码  ="  utf-8" > 
<  项目    ="   http://schemas.microsoft.com/developer/msbuild/2003" <  属性组 > 
        <   >  

([System.DateTime] :: Now.ToString("yy"))< /年 > < >

Hi, The problem I face is my target ''CopyBuildFiles'' does not copy as I think it is unable to find the build folder. The build folder is defined in the property $(BuildFolder), this folder name is created based on date.time and is created in one of the previous targets that runs before ''CopyBuildFiles''.
If I hardcode a path for @(SrcFiles) instead of deriving this from $(BuildFolder) it works.
Any thoughts, what is happening here and how can this be resolved?
Many thanks.

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <year>$([System.DateTime]::Now.ToString("yy"))</year>
        <month>$([System.DateTime]::Now.ToString("MM"))</month>
        <day>$([System.DateTime]::Now.ToString("dd"))</day>
        <time>$([System.DateTime]::Now.ToString("HHmm"))</time>
        <AssemblyFileVersionAttribute>[$(year).$(month).$(day).$(time))]      </AssemblyFileVersionAttribute>
        <BuildFolder>c:\website.builds\$(AssemblyFileVersionAttribute)\</BuildFolder>
        <IISFolder>c:\website.publish\</IISFolder>        
        <LogDirectory>C:\website.builds.logs</LogDirectory>
        <LogFile>C:\website.builds.logs\Buildlog_$(AssemblyFileVersionAttribute).txt</LogFile>
        
    </PropertyGroup>
    
   
    <Target Name="PreBuild">
        <MakeDir Directories="$(LogDirectory)" />       
        <RemoveDir Directories="$(IISFolder)"></RemoveDir>        
        <MakeDir Directories="$(BuildFolder)" />
        <MakeDir Directories="$(IISFolder)" />        
    </Target>
    <Target Name="Compile">
        <MSBuild Projects="$(MSBuildStartupDirectory)\websitev2.sln"  Properties="OutDir=$(BuildFolder)\" />        
    </Target>
    <ItemGroup>
        <SrcFiles Include="$(BuildFolder)_PublishedWebsites\**\*.*"/>
    </ItemGroup>
    <Target Name="CopyBuildFiles"

              Inputs="@(SrcFiles)"

              Outputs=
          "@(SrcFiles->'$(IISFolder)%(RecursiveDir)%(Filename)%(Extension)')">
        <Copy SourceFiles="@(SrcFiles)"

              DestinationFiles="@(SrcFiles->'$(IISFolder)%(RecursiveDir)%(Filename)%(Extension)')"

          />      
    </Target>
    
    <Target Name="Deploy">
        <CallTarget Targets="PreBuild" />
        <CallTarget Targets="Compile" />
        <CallTarget Targets="CopyBuildFiles" />
    </Target>
   
</Project>

解决方案

(BuildFolder), this folder name is created based on date.time and is created in one of the previous targets that runs before ''CopyBuildFiles''.
If I hardcode a path for @(SrcFiles) instead of deriving this from


(BuildFolder) it works.
Any thoughts, what is happening here and how can this be resolved?
Many thanks.

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <year>


([System.DateTime]::Now.ToString("yy"))</year> <month>


这篇关于MSBuild复制任务找不到定义的属性的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆