1

作为 CI 流程的一部分,我正在尝试为 SSIS 项目创建清单文件。我发现我应该能够使用MSBuild 扩展包中的 BuildDeploymentManifest 任务来执行此操作。

通过创建一个调用此任务的 MSBuild 文件并传入 SSIS 项目文件,我已在本地开发人员机器上成功实现了这一目标。输出正是我想要的,即将 .dtsConfig 和 .dtsx 文件复制到输出文件夹,并生成清单文件。

但是,当我将其添加到我的 CI 系统中时,我收到以下错误:

error MSB4018: The "MSBuild.ExtensionPack.SqlServer.BuildDeploymentManifest" task failed unexpectedly.
error MSB4018: System.IO.IOException: The device is not ready.
error MSB4018: 
error MSB4018:    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
error MSB4018:    at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite)
error MSB4018:    at System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite)
error MSB4018:    at MSBuild.ExtensionPack.SqlServer.BuildDeploymentManifest.CreateElementForFileAndCopy(String fileType, String sourcePath, String destinationPath) in C:\Projects\CodePlex\MSBuildExtensionPack\Solutions\Main3.5\Framework\SqlServer\BuildDeploymentManifest.cs:line 158
error MSB4018:    at MSBuild.ExtensionPack.SqlServer.BuildDeploymentManifest.<>c__DisplayClass18.<Execute>b__a(<>f__AnonymousType1`2 <>h__TransparentIdentifier1) in C:\Projects\CodePlex\MSBuildExtensionPack\Solutions\Main3.5\Framework\SqlServer\BuildDeploymentManifest.cs:line 124
error MSB4018:    at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
error MSB4018:    at System.Xml.Linq.XContainer.AddContentSkipNotify(Object content)
error MSB4018:    at System.Xml.Linq.XContainer.AddContentSkipNotify(Object content)
error MSB4018:    at MSBuild.ExtensionPack.SqlServer.BuildDeploymentManifest.Execute() in C:\Projects\CodePlex\MSBuildExtensionPack\Solutions\Main3.5\Framework\SqlServer\BuildDeploymentManifest.cs:line 103
error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask, Boolean& taskResult)

关于可能导致这种情况的任何想法?调用在我的开发虚拟机上运行的构建文件的确切批处理文件有效。我已尝试排除诸如防病毒之类的问题导致问题,并且我已将其关闭,但仍然出现相同的错误。

4

1 回答 1

0

好的,看起来我将能够在与同事一起研究这个问题后回答我自己的问题。

在 *.dtsx 中有一个指向与其关联的配置文件位置的路径。这个硬编码路径正在查看 D:\ 驱动器,它存在于我的开发人员机器上,但不在构建服务器上(至少不是作为物理硬盘驱动器,而是作为 DVD 驱动器)。结果,它试图从 DVD 驱动器中读取文件,这就是导致“设备未就绪错误”的原因。我修改了 *dtsx 文件以使用相对路径,而不是绝对路径,现在一切似乎都正常了!:-)

希望这对某人有帮助!

加里

于 2013-09-10T08:14:30.103 回答