【问题标题】:How to modify the csdef defined in a cspkg如何修改 cspkg 中定义的 csdef
【发布时间】:2012-05-13 01:40:54
【问题描述】:

为了部署到不同的 azure 环境,我在编译步骤中修改了 csdef 以更改主机标头。这样做需要为每个环境构建一次 cspkg,而不是能够重用 cspkg 并为部署指定不同的配置。

我想在创建 cspkg 后修改它的 csdef 文件,而不需要重新编译。这可能吗?如果可以,怎么办?

【问题讨论】:

    标签: powershell msbuild azure


    【解决方案1】:

    我已经做了一些与您所追求的类似的事情来区分测试环境和实际环境。首先,您需要创建一个新的 .csdef 文件,用于替代设置。这需要是完整的文件,因为我们只是将其与原始文件交换。现在我们需要将它添加到云项目中。右键单击云项目并选择卸载项目。再次右键单击它并选择编辑[项目名称]。有一段看起来有点像这样:

    <ItemGroup>
        <ServiceConfiguration Include="ServiceConfiguration.Test.cscfg" />
        <ServiceDefinition Include="ServiceDefinition.csdef" />
        <ServiceConfiguration Include="ServiceConfiguration.cscfg" />
    </ItemGroup>
    

    添加一个指向新创建文件的新 ServiceDefinition 项。现在找到以下行:

    <Import Project="$(CloudExtensionsDir)Microsoft.WindowsAzure.targets" />
    

    然后添加此代码块,将 TargetProfile 检查编辑为您要用于备用的构建配置,并确保它指向您的新 .csdef 文件

    <Target Name="AfterResolveServiceModel">
        <!-- This should be run after it has figured out which definition file to use
            but before it's done anything with it.  This is all a bit hard coded, but
            basically it should remove everything from the SourceServiceDefinition
            item and replace it with the one we want if this is a build for test-->
        <ItemGroup>
          <!-- This is an interesting way of saying remove everything that is in me from me-->
          <SourceServiceDefinition Remove="@(SourceServiceDefinition)" />
          <TargetServiceDefinition Remove="@(TargetServiceDefinition)" />
        </ItemGroup>
        <ItemGroup Condition="'$(TargetProfile)' == 'Test'">
          <SourceServiceDefinition Include="ServiceDefinition.Test.csdef" />
        </ItemGroup>
        <ItemGroup Condition="'$(TargetProfile)' != 'Test'">
          <SourceServiceDefinition Include="ServiceDefinition.csdef" />
        </ItemGroup>
        <ItemGroup>
          <TargetServiceDefinition Include="@(SourceServiceDefinition->'%(RecursiveDirectory)%(Filename).build%(Extension)')" />
        </ItemGroup>
        <Message Text="Source Service Definition Changed To Be: @(SourceServiceDefinition)" />
      </Target>
    

    要恢复正常,请右键单击项目并选择重新加载项目。现在,当您构建项目时,根据您使用的配置,它将使用不同的 .csdef 文件。值得注意的是,其中的设置编辑器不知道您的第二个 .csdef 文件,因此如果您通过 GUI 添加任何新设置,则需要手动将它们添加到此备用版本中。

    【讨论】:

    • 这可行,但需要重新编译。我希望能够在不重新编译的情况下交换 csdef 文件。
    【解决方案2】:

    如果您只想拥有不同的 CSDEF,那么您可以直接使用 CSPACK 命令提示符轻松完成,如下所示:

    1. 打开命令窗口并找到与 Windows Azure 项目相关的 CSDEF/CSCFG 和 CSX 文件夹所在的文件夹
    2. 根据您的微小更改创建多个 CSDEF
    3. 确保路径中有 Windows Azure SDK 以启动 CS* 命令
    4. 使用 CSPACK 命令并传递参数以使用不同的 CSDEF 和输出 CSPKG 文件,如下所示:

    cspack &lt;ProjectName&gt;\ServiceDefinitionOne.csdef /out:ProjectNameSame.csx /out:ProjectOne.cspkg /_AddMoreParams

    cspack &lt;ProjectName&gt;\ServiceDefinitionTwo.csdef /out:ProjectNameSame.csx /out:ProjectTwo.cspkg /_AddMoreParams

    更多关于 CSPACK:http://msdn.microsoft.com/en-us/library/windowsazure/gg432988.aspx

    【讨论】:

    • 这似乎是在正确的轨道上,但我想我错过了一些东西。编译后我只有一个 cspkg 和 cscfg,我不确定如何获取 csx 文件夹。另外,我读到 cspkg 文件有加密,这会破坏加密吗?
    • CSPKG 在 Azure SDK 1.5 之后没有加密,所以不用担心。如果您运行正确的 CSPACK 命令,它将生成 CSPKG,因此请继续工作,否则请提供您的命令,我会检查问题所在。
    • 我运行 msbuild /nologo solution.sln /p:SkipInvalidConfigurations=true /p:PublishDir=C:\publishDir /p:TargetProfile=dev /t:publish /p:OutDir=C:\outputDir /p:Configuration="Release" /p:Platform="Any CPU" /p:RunCodeAnalysis="False" /v:minimal 并且在我的发布目录中留下了一个 cspkg 文件。我不确定如何获取 csx 文件夹。
    【解决方案3】:

    据我所知,.cspkg 创建后不能轻易修改。我想您可能在技术上可以,因为 .cspkg 是一个遵循特定结构的 zip 文件。

    我要问的问题是为什么?如果要修改 VM 角色大小等设置(因为这是在 .csdef 文件中定义的),那么我认为您有几种替代方法:

    • 为每个变体创建一个单独的 Windows Azure 部署项目 (.csproj)。是的,我意识到这可能很痛苦,但它确实让 Visual Studio 工具运行良好。拥有更易于使用的工具支持可能是值得的。
    • 在构建过程中运行配置文件转换。类似于 web.config 转换。

    就个人而言,我采用不同的 .csproj 方法。主要是因为我不是配置文件转换忍者。 . .然而。 ;) 这是阻力最小的路径,到目前为止效果很好。

    【讨论】:

    • 您的意思是为每个添加一个新的 ccproj 吗?
    • 是 - 为每个部署目标创建一个新的 Windows Azure 部署项目 (.ccproj)。
    猜你喜欢
    • 2014-12-06
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2021-11-18
    • 2015-07-01
    相关资源
    最近更新 更多