WindowsAzure.targets ValidateServiceFiles是必不可少的构建步骤吗?

时间:2013-05-29 08:58:56

标签: azure msbuild

我们的azure构建存在问题,如果我们在csdef文件的WebRole / Contents / Content / SourceDirectory部分中使用绝对路径,我们只能使它工作。虽然它确实支持相对路径(包括'..')和环境变量(!是在SET中),问题是我们无法获得成功构建的任何非绝对路径,因为它看起来.csdef文件被“验证”了两次:一旦它在打包之前位于项目目录中,并且在它被移动到/ bin文件夹之后再次出现。显然,如果我们从两个不同的位置开始,没有一个相对路径能够解析到相同的内容目录!您可以做的是为两个构建步骤阶段之一获取正确的路径......但是另一个阶段将失败。违规目标是PreValidateServiceModel,它调用ValidateServiceFiles任务。

为了使用相对路径构建我的项目,我需要禁用PreValidateServiceModel目标。包装出现可以工作,虽然我担心跳过目标会遗漏一些重要的过程(除了显而易见的......服务文件未经过验证!)。这就是说.csdef文件仍然是“有效的”,因为它必须被解析以创建包。

2 个答案:

答案 0 :(得分:1)

我有类似的问题。检查documentation on the Source directory element of the WebRole schema,我看到支持目录路径中的环境变量扩展。这使我得到了以下解决方案。

在包含csdef文件的项目的预构建事件中,我将我的文件从UpdaterFiles目录复制到Temp目录下的目录:

IF NOT EXIST %TEMP%\UpdaterFiles MKDIR %TEMP%\UpdaterFiles
XCOPY $(ProjectDir)..\UpdaterFiles\*.* %TEMP%\UpdaterFiles\ /Y

然后我的源目录变为:

<SourceDirectory path="%TEMP%\UpdaterFiles" />

上面的作品就像一个魅力

答案 1 :(得分:1)

这是一个不同的解决方案,可避免复制到临时。

正如已经提到的,问题是相对路径在两个不同的地方不起作用:

1. ProjectFolder\ServiceDefinition.csdef
2. ProjectFolder\bin\Debug\ServiceDefinition.csdef

因此,我将ServiceDefinition.csdef的源位置向下移动了两个文件夹级别,以便在两种情况下都可以使用相同的相对路径:

1. ProjectFolder\Service\Definition\ServiceDefinition.csdef
2. ProjectFolder\bin\Debug\ServiceDefinition.csdef

为此,我编辑了项目文件(右键单击,&#39;编辑项目文件&#39;)并更改了:

<ServiceDefinition Include="ServiceDefinition.csdef" />

成:

<ServiceDefinition Include="Service\Definition\ServiceDefinition.csdef" />

我在Windows资源管理器中创建了这两个子文件夹,并将文件移动到新位置。然后我重新加载了项目。

我注意到Visual Studio自动为我添加了这两行:

<Folder Include="Service\" />
<Folder Include="Service\Definition\" />

在我的ServiceDefinition.csdef文件中,我通过将三个文件夹上传到解决方案文件夹,然后从那里导航来引用源目录:

<SourceDirectory path="..\..\..\MySourceProject\MySourceFolder" />