簡體   English   中英

在構建/部署或運行​​時更改 SSIS 腳本任務中引用的 dll

[英]Change the referenced dll in a SSIS script task at build / deploy or runtime

最近,我已將我們所有的 SSIS 項目添加到持續集成管道中。 這些項目使用 TeamCity 中的 MSBuild 構建,打包並推送到 nuget 提要。 我們使用 Octopus 和一些構建在后台 os SQL 服務器管理對象 (SMO) 上的手動 PowerShell 部署它們。 一切正常,除了一個項目。 有問題的項目包含一些引用外部程序集的腳本任務。 該程序集構建在同一管道中,其程序集版本號由流程的一部分更新。 問題在於,SSIS 項目現在引用了 GAC 中一個不存在的強命名 dll,因為版本號已更改。

有誰知道在 CI 服務器上構建時更新參考或在部署時覆蓋版本號的方法?

我知道這篇文章已經很老了,但它已經被查看了很多,所以這是我找到的一個解決方案。

您需要為構建包含一個“目標”文件。

這是一個示例目標文件:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <E10BOs>C:\Integrations\E10 Uplifts\Epicor 10.2.600.3</E10BOs>
    </PropertyGroup>
    <Target Name="BeforeResolveReferences">
        <CreateProperty Value="$(E10BOs);$(AssemblySearchPaths)">
            <Output TaskParameter="Value" PropertyName="AssemblySearchPaths" />
        </CreateProperty>
    </Target>
</Project>

屬性組 E10BOS(並且可以超過 1 個)然后定義您要構建的版本的 dll 的路徑。

它需要保存為 myTargetsFile.targets

然后在常規 VS 項目中,您可以將此行添加到項目文件中(在記事本中的 VS 之外)

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

  <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), myTargetsFile.targets))\myTargetsFile.targets" />
</Project>

這使用 GetDirectoryNameOfFileAbove 向上搜索文件夾樹,直到找到您的目標文件,然后將其導入。 如果您有很多不同的項目都需要版本更改,並且您不必找出任何相對路徑,則非常有用!

然而,在 SSIS 中,這似乎不起作用。 什么是硬連接包 .dtsx 文件中目標文件的路徑,再次在記事本中編輯它並添加以下行(您可能會像以前一樣在項目標簽末尾附近看到 csharp 條目:

<Import Project="C:\Integrations\E10 Uplifts\Epicor 10.2.600.3\myTargetsFile.targets" />

這會將項目引用的信息傳遞到腳本中。

然后,對於所有使用目標文件的項目,通過更改您希望它們使用的版本文件夾的路徑來更改版本。

希望有幫助嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM