2

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

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

4

2 回答 2

1

我有一个类似的问题。检查WebRole 模式的 Source 目录元素的文档,我看到支持目录路径中的环境变量扩展。这使我得到了以下解决方案。

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

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

然后我的源目录就变成了:

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

以上工作就像一个魅力

于 2013-11-05T08:47:55.387 回答
1

这是一个不同的解决方案,它避免复制到 temp.

如前所述,问题在于相对路径在两个不同的地方不起作用:

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

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

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

为此,我编辑了项目文件(右键单击,“编辑项目文件”)并更改:

<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" />
于 2014-07-01T09:24:09.187 回答