目前,我们的 Web 应用程序项目中有所有 Sitecore 渲染 XSLT 和用户控件。我们想将他们转移到他们自己的项目中,但其他一切都一样。
那可能吗?
只要物理文件最终到达它们应该作为构建过程的一部分的位置,我看不出有什么理由不能将它们移动到它们自己的项目中。您会遇到的唯一问题是 Sitecore 是否正在查找文件但找不到它们。
这是我用来执行此操作的方法,请注意,它确实需要修改您的 csproj 文件,以确保将文件放置在构建的适当目录中。我基于 SharedSource 示例,例如,Shared Source 的 Language Fallback 项目室中的 Partial Language Fallback 模块使用了这种技术。
在您的项目目录中,创建一个名为deploydirectory.txt
并放置您最终 Web 位置的路径的文件。
在新项目的 csproj 文件中,在 之前添加此代码块</project>
(假设此处未进行其他自定义更改)
<Target Name="AfterBuild">
<CallTarget Targets="DeployToWeb" Condition="Exists('deploydirectory.txt')" />
</Target>
<Target Name="DeployToWeb">
<ReadLinesFromFile File="deploydirectory.txt">
<Output PropertyName="DeployPath" TaskParameter="Lines" />
</ReadLinesFromFile>
<CreateItem Include="App_Config\**\*.*;bin\*.dll;layouts\**\*.ascx" Exclude="**\.svn\**\*.*">
<Output ItemName="DeployFiles" TaskParameter="Include" />
</CreateItem>
<Copy SourceFiles="@(DeployFiles)" DestinationFiles="@(DeployFiles->'$(DeployPath)\%(RelativeDir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" />
</Target>
这个代码块就目前而言,将 app_config 中的所有文件、bin 中的所有 dll 文件以及布局目录和子目录中的所有 ascx 文件复制到 deploydirectory.txt 文件的路径中。定义它们将**
被放置到目标的适当子目录中。
当前设置为排除找到的任何 .svn 目录。
最后,只有在项目目录中有 deploydirectory.txt 文件时才会运行,否则它会完全忽略此指令。
编辑:如果需要,您还可以在单独的文件中包含要移动的目录/文件列表,这样每次添加更多需要移动的文件时都不需要修改 csproj 文件(比如你开始使用用户控件,然后稍后添加 xslt 渲染等)
<Target Name="AfterBuild">
<CallTarget Targets="DeployToWeb" Condition="Exists('deploydirectory.txt')" />
</Target>
<Target Name="DeployToWeb">
<ReadLinesFromFile File="deploydirectory.txt">
<Output PropertyName="DeployPath" TaskParameter="Lines" />
</ReadLinesFromFile>
<ReadLinesFromFile File="SourceFilePaths.txt">
<Output ItemName="SourceFilePaths" TaskParameter="Lines" />
</ReadLinesFromFile>
<CreateItem Include="@(SourceFilePaths)" Exclude="**\.svn\**\*.*">
<Output ItemName="DeployFiles" TaskParameter="Include" />
</CreateItem>
<Copy SourceFiles="@(DeployFiles)" DestinationFiles="@(DeployFiles->'$(DeployPath)\%(RelativeDir)%(Filename)%(Extension)')" SkipUnchangedFiles="true" />
</Target>
其中SourceFilePaths.txt
包含以下内容
App_Config\**\*.*
bin\*.dll
layouts\**\*.ascx