Задача AspnetCompiler в проекте SharePoint
Вопрос
Я хотел бы знать, как компилировать файлы ASPX после сборки в решении SharePoint, чтобы увидеть ошибки времени выполнения e.g.Отсутствует ресурс (при переводе страницы используя ресурсы).
Когда я добавляю задачу AspnetCompiler в мою csproj, как это (только показывая конец файла проекта):
...
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\SharePointTools\Microsoft.VisualStudio.SharePoint.targets" Condition="'$(VSToolsPath)' != ''" />
<Target Name="AfterBuild">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)" />
<!-- ToolPath="C:\Windows\Microsoft.NET\Framework64\v2.0.50727" -->
</Target>
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
</Project>
.
Тогда при создании проекта я получаю следующую ошибку в файле ASPX:
не удалось загрузить файл или сборку '$ sharepoint.project.assemblylname $' или одна из его зависимостей.Система не может найти указанный файл.
Очевидно, что компилятор ASP пытается создать файлы ASPX в каталоге проекта, которые не имеют замененных токенов.Тем не менее, я не смог доработать задачу, поэтому она будет работать на полях с замененными токенами.Мои знания MSBUILD ограничены, что может быть проблемой.
Решение
Единственный способ сделать замену токена - создать пакет WSP, потому что возникает замена.Затем решение для создания WSP, распаковка его к целевой папке, создайте новый каталог там, который называется «BIN», переместите DLL в каталог Bin, а затем запускайте компилятор ASPNET в целевой папке.Весь процесс можно сделать в файле MSBUILD (CSPROJ).Это мое решение - в конце файла CSPROJ после импортированных целей SharePoint:
<Import Project="$(VSToolsPath)\SharePointTools\Microsoft.VisualStudio.SharePoint.targets" Condition="'$(VSToolsPath)' != ''" />
<PropertyGroup>
<!-- schedule creating the package in the build, the task is defined in sharepoint targets -->
<BuildDependsOn>$(BuildDependsOn);CreatePackage</BuildDependsOn>
<PostBuildEvent>
</PostBuildEvent>
<!-- define file/folder properties -->
<ExpandDest>$(TargetDir)_wsp</ExpandDest>
<WspBinPath>$(ExpandDest)\bin</WspBinPath>
<WspPath>$(TargetDir)MyProject.wsp</WspPath>
</PropertyGroup>
<!-- override "after build" target, it must depend on the package creation,
which ensures that the target runs after we have the wsp package ready -->
<Target Name="AfterBuild" DependsOnTargets="CreatePackage">
<!-- create the folder where we unpack our wsp -->
<MakeDir Directories="$(ExpandDest)" />
<!-- use expand to unpack the wsp -->
<Message Text="$(ExpandWsp)" Importance="high" />
<Exec Command="expand "$(WspPath)" -F:* "$(ExpandDest)"" />
<!-- create the "bin" folder -->
<MakeDir Directories="$(WspBinPath)" />
<!-- move all dlls and xmls from the root to the bin folder -->
<Exec Command="move /Y "$(ExpandDest)\*.dll" "$(WspBinPath)"" />
<Exec Command="move /Y "$(ExpandDest)\*.xml" "$(WspBinPath)"" />
<!-- run the aspnet compiler on the wsp folder,
the tool path param ensures that .net 2 compiler will be used,
we need that because we compile sharepoint 2010 which is .net 3.5
and the latest aspnet compiler for .net 3.5 is in .net 2 -->
<AspNetCompiler
VirtualPath="/"
PhysicalPath="$(ExpandDest)"
Clean="true"
ContinueOnError="false"
ToolPath="C:\Windows\Microsoft.NET\Framework\v2.0.50727" />
</Target>
</Project>
.
<Сильные> Редактировать: Процесс немного сложнее.Согласно вашему собственному проекту, вы должны перемещать несколько файлов в определенные папки.По сути, следуйте тому, что вам говорят компилятор.